【发布时间】:2016-07-22 19:02:13
【问题描述】:
在 TypeScript 1.8 中,他们添加了一种称为“字符串文字类型”的新类型,它允许您声明只能是一组有限值之一的类型。他们给出的例子是:
type Easing = "ease-in" | "ease-out" | "ease-in-out";
但是,在他们的所有示例中,类型要么在其使用的类的外部定义,要么在没有别名的情况下内联定义。正如this question 的答案中所解释的(相当简洁),类型别名声明的范围仅限于它们的包含模块。
在我的项目中,我想为与特定类配对并在多个地方使用的字符串文字定义类型别名。由于我使用的 API 的结构,有多个类,每个类都具有相同名称但不同的潜在值的属性。如果可以的话,我想保持我的代码整洁,不要有一堆带前缀的全局类型声明(MyClassAPropertyValue、MyClassBPropertyValue 等)。
那么,有没有办法在类范围内声明 type(最好是可以从外部模块中使用)? 如果没有,是否有一个紧密的替代或计划的功能将填写这个用例?
用例:
假设我有两个类来包装我的底层 API 数据。每个类代表不同的数据,它们恰好有一些同名的属性。我想要一种定义属性的方法,如下所示:
export class APIObjectA {
// Valid values in APIObjectA
public type Property1Value = "possible_value_A" | "possible_value_B";
public type Property2Value = "possible_value_C" | "possible_value_D";
// Here, "Property1Value" refers to the version in APIObjectA
public get property1(): Property1Value {
// Return value of property1 from underlying API data
}
public get property2(): Property2Value {
// ...
}
}
export class APIObjectB {
// Valid values in APIObjectB
public type Property1Value = "possible_value_E" | "possible_value_F";
public type Property2Value = "possible_value_G" | "possible_value_H";
// In this context, "Property1Value" refers to the version in APIObjectB
public get property1(): Property1Value {
// ...
}
public get property2(): Property2Value {
// ...
}
}
然后,理想情况下,我可以在消费代码中引用特定类型,以便我在任何地方都有类型:
var myNewValue: APIObjectB.Property1Value = "possible_value_F";
【问题讨论】:
-
我想我明白你在问什么,但你能添加一些代码作为你打算如何使用这种类型的例子吗?
标签: types typescript typescript1.8