我目前正在尝试别名泛化类。我正在使用typescript-collections软件包并希望进行一些重命名。类型化别名泛化类的实例
class Bar<T> {}
class Foo = Bar<X>;
我该如何去做第二行?
我目前正在尝试别名泛化类。我正在使用typescript-collections软件包并希望进行一些重命名。类型化别名泛化类的实例
class Bar<T> {}
class Foo = Bar<X>;
我该如何去做第二行?
如果你需要的是别名Bar<X>
式注释/在其他地方的提示(如function blah(foo: Bar<X>)
)。你可以使用下面的语句:
type Foo = Bar<X>;
注意,你仍然不能做new Foo()
中, type
语句仅对TypeScript的“类型”部分有贡献,而对“值”部分不起作用(就像类一样)。
如果你想要一个实际的类,一个简单而有效的解决办法是延长原Bar<X>
类,像这样:
class Foo extends Bar<X> {}
我个人特别不喜欢这种解决方案虽然,因为它使你的代码不太清楚。
有没有办法做第二部分,但不只是获取类型信息? – iHowell
已编辑。再次,我不特别喜欢这个解决方案。 OO继承不应该用于别名。 –
您可以从Bar<X>
继承Foo
使一类中预定义的X
类型参数:
class Foo extends Bar<X> {}
您可以使用一个类型别名为@toskv建议:
type Foo = Bar<X>;
然后你可以使用它作为一种类型:
let foo: Foo = new Bar<X>();
如果你有一个接受的X
实例的构造方法,则编译器会推断出类型:
class Bar<T> {
constructor(x: X) { }
}
let foo: Foo = new Bar();
如果你想它绑定到特定的泛型约束一个新的类,那么你就需要做是这样的:
class Foo extends Bar<X> { ... }
let foo = new Foo();
如果你需要的是一个类型别名那么你可以使用类型来创建这样说:
type Foo = Bar<X>;
有了这个,你就可以不喜欢的事情:
let x: Foo;
但不是:
let x= new Foo();
另一种解决方案是只延长酒吧和作出的空类。这不是真的如何使用类层次结构,但它可以满足您的需求。
class Foos extends Bar<number> { }
你想通过第二行完成什么?你将如何使用'Foo'? –
我打算在每个地方都用'Foo'替换'Bar'。 '酒吧'是一个很长的名字,来自typescript-collections包,'Foo'是一个更有意义的名字。 –
iHowell
你可以只键入Foo =栏;但我不确定这会起什么作用。除了某些地方的类型别名外,您不能使用该类型来创建新对象,例如,只能将其用作类型别名。 –
toskv