广义 Class 的打字稿别名实例
Typescript Alias Instance of Generalized Class
我目前正在尝试为通用 class 添加别名。我正在使用 typescript-collections 包并想做一些重命名。
class Bar<T> {}
class Foo = Bar<X>;
第二行我该怎么办?
如果您只需要在其他地方为 annotations/hints 类型别名 Bar<X>
(例如 function blah(foo: Bar<X>)
),您可以使用以下语句:
type Foo = Bar<X>;
请注意,您仍然无法执行 new Foo()
,type
语句仅有助于 TypeScript 的 "types" 部分,而不会影响 "values" 部分(就像 class 那样)。
如果您想要一个实际的 class,一个简单有效的解决方案是扩展原始的 Bar<X>
class,如下所示:
class Foo extends Bar<X> {}
不过,就个人而言,我并不是特别喜欢这个解决方案,因为它会使您的代码不那么清晰。
您可以从 Bar<X>
继承 Foo
以使用预定义的 X
类型参数创建 class:
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,那么您需要执行以下操作:
class Foo extends Bar<X> { ... }
let foo = new Foo();
如果您只需要一个类型别名,那么您可以使用类型以这种方式创建它:
type Foo = Bar<X>;
有了它,您将能够执行以下操作:
let x: Foo;
但不是:
let x= new Foo();
另一种解决方案是只扩展 Bar 并创建一个空的 class。这并不是您应该如何使用 class 层次结构,但它可以满足您的需求。
class Foos extends Bar<number> { }
我目前正在尝试为通用 class 添加别名。我正在使用 typescript-collections 包并想做一些重命名。
class Bar<T> {}
class Foo = Bar<X>;
第二行我该怎么办?
如果您只需要在其他地方为 annotations/hints 类型别名 Bar<X>
(例如 function blah(foo: Bar<X>)
),您可以使用以下语句:
type Foo = Bar<X>;
请注意,您仍然无法执行 new Foo()
,type
语句仅有助于 TypeScript 的 "types" 部分,而不会影响 "values" 部分(就像 class 那样)。
如果您想要一个实际的 class,一个简单有效的解决方案是扩展原始的 Bar<X>
class,如下所示:
class Foo extends Bar<X> {}
不过,就个人而言,我并不是特别喜欢这个解决方案,因为它会使您的代码不那么清晰。
您可以从 Bar<X>
继承 Foo
以使用预定义的 X
类型参数创建 class:
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,那么您需要执行以下操作:
class Foo extends Bar<X> { ... }
let foo = new Foo();
如果您只需要一个类型别名,那么您可以使用类型以这种方式创建它:
type Foo = Bar<X>;
有了它,您将能够执行以下操作:
let x: Foo;
但不是:
let x= new Foo();
另一种解决方案是只扩展 Bar 并创建一个空的 class。这并不是您应该如何使用 class 层次结构,但它可以满足您的需求。
class Foos extends Bar<number> { }