typescript 2.3或2.4中的泛型重载已损坏
以下示例在从typescript 2.2升级时中断typescript 2.3或2.4中的泛型重载已损坏,typescript,Typescript,以下示例在从typescript 2.2升级时中断 interface ILayoutResult { id: string; data: any; } interface ILayout{ getResult<T extends ILayoutResult | ILayoutResult[] | void>() :T; } class test implements ILayout{ getResult(){ return {id:"
interface ILayoutResult {
id: string;
data: any;
}
interface ILayout{
getResult<T extends ILayoutResult | ILayoutResult[] | void>() :T;
}
class test implements ILayout{
getResult(){
return {id:"a", data:"aa"} as ILayoutResult ;
}
}
Types of property 'getResult' are incompatible.
Type '() => ILayoutResult' is not assignable to type '<T extends void | ILayoutResult | ILayoutResult[]>() => T'.
Type 'ILayoutResult' is not assignable to type 'T'.
接口结果{
id:字符串;
资料:有;
}
接口ILayout{
getResult():T;
}
类测试实现ILayout{
getResult(){
返回{id:“a”,数据:“aa”}作为结果;
}
}
属性“getResult”的类型不兼容。
类型“()=>ILayoutResult”不可分配给类型“()=>T”。
类型“ILayoutResult”不可分配给类型“T”。
这是一个正确的错误。ILayout
的定义是这样做是合法的:
const x: ILayout = ...;
const arr = x.getResult<ILayoutResult[]>();
const j = arr.pop();
我也得出了这个结论。不知何故,我采用了这种方式来添加通用模板,比如在调用getResult时,我可以很容易地知道我想要什么类型。但是正确的方法是将getResult()作为ILayoutResult
interface ILayout {
getResult(): ILayoutResult | ILayoutResult[] | void;
}