我写了一个函数来获取一个字符串数组并应该将它转换成一个 T 数组:
interface Fooable {
foo: string;
}
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
}
})
}
但是函数第一行的“bars”这个词用红线标出,表示:
TS2322: Type '{foo:string;}[]' is not assignable to type 'T[]'. Type '{foo:string}' is not assignable to type 'T'.
我怎样才能让它发挥作用?
最佳答案
您需要对返回的 Fooable
进行断言以键入 T
:
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
} as T;
})
}
原因是 T
不是 Fooable
,它只是扩展它但可能有额外的属性,例如:
interface Mooable extends Fooable {
moo: string;
}
simplifiedExample<Mooable>(["a", "b", "c"]);
在这种情况下 T
是 Mooable
但是 { foo: bar }
不满足它,这就是为什么你需要输入 cast .
关于javascript - 使用 Array.map (TypeScript) 返回通用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424558/