Visual Studio / Angular - 类型的参数不能分配给参数类型ObjectIterateeCustom <any [],boolean =“”>

时间:2018-06-15 13:41:10

标签: angular typescript visual-studio-code lodash

我正在使用typescript 3.8.3和loadash进行角度5项目。我使用Visual Studio Code作为我的编辑器。我最近将我的Visual Studio代码更新为版本1.24.0

更新后,我在visual studio代码中遇到了一些代码语法错误。这些错误不会导致任何编译器失败,而只是在我的代码中显示为红色。我得到的一个令人烦恼的是使用load的以下代码:

let id: string = '122354';
let queue: any[] = records;
_.find(queue, {value: id}) // loads iteration function

我的错误消息

Argument of type '{ value: string; }' is not assignable to parameter of type 'ObjectIterateeCustom<any[], boolean>'.
Type '{ value: string; }' is not assignable to type 'ObjectIterator<any[], boolean>'.
Type '{ value: string; }' provides no match for the signature '(value: any, key: string, collection: any[]): boolean'.

不幸的是,我无法使用值类型定义队列。我有什么选择来删除此语法错误?提前致谢。

4 个答案:

答案 0 :(得分:4)

lodash's find method的类型定义如

find<T>(
        object: _.Dictionary<T>,
        iterator: _.ObjectIterator<T, boolean>,
        context?: any): T | undefined;

请注意ObjectIterator的类型T。这意味着传递给迭代器的对象属性/值必须与作为object参数传递的类型相匹配。

换句话说,_.find(*[], {value: *, otherProp: *})星号必须是相同类型。

尝试

let id: any= '122354';
let queue: any[] = records;
_.find(queue, {value: id})

您还可以将as any添加到值中。这样会将id转换为any类型,与queue的类型匹配。

let id: string = '122354';
let queue: any[] = records;
_.find(queue, {value: id as any})

答案 1 :(得分:3)

queue的结构是什么?

_.find(queue, {value: id})

尝试用函数

替换{value: id}
const someFn = (el) => {
 return el.id === id;
}

答案 2 :(得分:1)

请不要使用任何类型,而应尝试使用具有属性值的接口

let queue: Record[] = [];
let record:Record=_.chain(queue).find({value:id}).value();

答案 3 :(得分:1)

只需显式声明类型参数T,而不是允许对其进行推断:

let id: string = '122354';
let queue: any[] = records;
_.find<string[]>(queue, {value: id});