Alo*_*lon 6 javascript arrays oop generics typescript
我写了一个函数,它获取一个字符串数组,并将其转换为T数组:
interface Fooable {
foo: string;
}
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
}
})
}
Run Code Online (Sandbox Code Playgroud)
但是函数第一行中的"bars"一词用红线标出,表示:
TS2322:类型'{foo:string;} []'不能赋值为'T []'.类型"{foo:string}"不能分配给"T"类型.
我怎样才能使它工作?
您需要键入assert返回Fooable的类型T:
function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
return bars.map(bar => {
return {
foo: bar
} as T;
})
}
Run Code Online (Sandbox Code Playgroud)
(游乐场代码)
原因是,T它不是Fooable,它只是扩展它,但可能有其他属性,例如:
interface Mooable extends Fooable {
moo: string;
}
simplifiedExample<Mooable>(["a", "b", "c"]);
Run Code Online (Sandbox Code Playgroud)
在这种情况下T是Mooable,但{ foo: bar }不能满足它,这就是为什么你需要强制类型转换.