这是我在旧版本的 TypeScript 中一直在做的事情,并且我在 C# 中使用此方法,但它在最新的 1.0 版本的 TypeScript 中不起作用。
这是过去有效的方法:
class Base<T extends Base<T>> {
public children : Array<T>;
doAction() {
this.children[0].promise(); // used to work
}
promise() : T {
return this; // used to work
}
}
class Child extends Base<Child> {
public myString: string;
}
new Child().promise().myString; // used to work
过去一切都很和谐。
现在在 TypeScript 1.0 中我收到此错误Base<T extends Base<T>>
定义:
类型参数的约束不能引用同一类型参数列表中的任何类型参数。
如何修复此示例类以使其正常工作,而不需要类之外的任何强制转换或将任何内容强制转换为“任何”?也许这种模式应该改变?
您不再被允许使用T
here:
class Base<T extends Base<T>>
--------------------------^
您要么必须使您的课程成为非通用课程,要么使用:
class Base<T extends Base<any>>
这样做的原因是为了让编译器更简单:
在我们不断努力简化语言的过程中,我们正在简化通用约束可能需要的内容。
类型检查、错误报告和设计复杂性方面增加的开销并没有增加足够的额外表达能力,因此 1.0 值得这样做。我们可能会在 TypeScript 的未来版本中重新审视这一点。
-- 重大变更维基
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)