我在代码中有这个:
interface OneThing {
}
interface AnotherThing extends OneThing {
}
interface ThirdThing extends AnotherThing {
}
interface ThingKeeper {
getThings<T extends OneThing>(): T[];
}
class Thingamajigger implements ThingKeeper {
getThings(): ThirdThing[] {
return new Array<ThirdThing>();
}
}
Typescript编译器在Thingamajigger中的getThings()上给我一个错误。
文件:“Sandbox.ts”
严重性:“错误”
消息:“类'Thingamajigger'错误地实现了接口(interface)'ThingKeeper'。
属性“getThings”的类型不兼容。
类型'()=> ThirdThing []'不可分配给类型'()=> T []'。
类型“ThirdThing []”不可分配给类型“T []”。
无法将类型“ThirdThing”分配给类型“T”。
位于:“14,7”
来源:“ts”
码:“2420”
这不行吗?
感谢您的任何反馈。
最佳答案
如果查看类型检查器报告的错误消息,则很明显发生了什么:
() => ThirdThing[]
不可分配给<T extends OneThing>() => T[]
ThirdThing[]
不可分配给T[]
ThirdThing
不可分配给T
ThirdThing
和T
类型不相关,例如,如果考虑这样的层次结构: OneThing
/ \
T ThirdThing
因此,编译器说不能确定分配它。解决方案是通过
T
类关联ThirdThing
和ThingKeeper
:interface OneThing {
}
interface AnotherThing extends OneThing {
}
interface ThirdThing extends AnotherThing {
}
interface ThingKeeper<T extends OneThing> {
getThings(): T[];
}
class Thingamajigger implements ThingKeeper<ThirdThing> {
getThings(): ThirdThing[] {
return new Array<ThirdThing>();
}
}