我编写了一个获取字符串数组的函数,并将其转换为T数组:
interface Fooable {
foo: string;
}
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
}
})
}
但是&#34; bar&#34;在函数的第一行用红线标出,表示:
TS2322:输入&#39; {foo:string;} []&#39;不能分配给&#39; T []&#39;。输入&#39; {foo:string}&#39;不能分配给&#39; T&#39;。
我怎样才能让它发挥作用?
答案 0 :(得分:5)
您需要键入断言返回的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 }
,但$car_all_attributes[$f_key]['old_price'] = $car_fare;
$car_all_attributes[$f_key][$key] = $cars;
并不满足,这就是您需要输入强制转换的原因。