在下面的TypeScript片段中:
class TBase { } class Foo<T extends TBase> { f() :T { return new T(); } }
new()行抛出以下编译错误:“T”仅引用类型,但在此处用作值。请问我错过了什么?
new()
rqdpfwrv1#
这是因为T是一个类型参数,而不是一个不能用于创建对象的新示例的具体类型。每当使用new关键字时,您都在尝试创建T的新示例,这是不允许的,因为T是一种类型,而不是值。相反,在创建Foo的示例时,为T定义一个从TBase扩展的具体类型,然后使用它创建一个新示例。
T
Foo
TBase
1条答案
按热度按时间rqdpfwrv1#
这是因为
T
是一个类型参数,而不是一个不能用于创建对象的新示例的具体类型。每当使用new关键字时,您都在尝试创建T
的新示例,这是不允许的,因为T
是一种类型,而不是值。相反,在创建
Foo
的示例时,为T
定义一个从TBase
扩展的具体类型,然后使用它创建一个新示例。