我编写了一个函数,该函数获取字符串数组并将其转换为T数组:
interface Fooable {
foo: string;
}
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
}
})
}
但是函数第一行中的“bars”一词用红线标记,表示:
我该如何运作?
最佳答案
您需要输入assert来返回Fooable
来输入T
:
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
} as T;
})
}
(code in playground)
原因是
T
不是Fooable
,它只是扩展它,但可能具有其他属性,例如:interface Mooable extends Fooable {
moo: string;
}
simplifiedExample<Mooable>(["a", "b", "c"]);
在这种情况下,
T
是Mooable
,但{ foo: bar }
不满足要求,这就是为什么需要键入强制转换的原因。