考虑以下函数:
function extractItemsFromArray(array: any[], isItemToBeRemoved: (item: any) => boolean) {
let removedItems = [];
let i = array.length;
while(i--)
if(isItemToBeRemoved(array[i]))
removedItems.push(array.splice(i, 1));
return removedItems;
}
它的签名说:我接受any
项目数组和一个检查器函数,该函数决定是否删除类型为 的项目any
。
但是,如果一个带有签名的函数(item: string) => boolean
被传递为isItemToBeRemoved
并且number[]
被传递为array
(我假设两者都被断言给某些类型),那么上面的函数定义不会告诉 TS 它实际上是不行的。有没有办法any
在extractItemsFromArray
相同类型的事物的定义中标记这两个?
好的,在写这个问题时,我用谷歌搜索了一下,并决定阅读更多关于Advanced Types 的信息。似乎类型别名实际上是我正在寻找的:
function extractItemsFromArray<T>(array: T[], isItemToBeRemoved: (item: T) => boolean) {
...
}
用法似乎是:
let roots = extractItemsFromArray<INode>(dictionaryCopy, item => !item.parentId);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句