是否可以在TypeScript的类中定义类型(字符串文字联合)?

芥末扇

在TypeScript 1.8中,他们添加了一个称为“字符串文字类型”的新类型,该类型使您可以声明只能是一组有限值之一的类型。他们给出的示例是:

type Easing = "ease-in" | "ease-out" | "ease-in-out";

但是,在所有示例中,类型要么其使用的类之外定义要么在没有别名的情况下内联定义。对此问题的答案所述(相当简洁),类型别名声明的作用域仅限于其包含的模块。

在我的项目中,我想为与特定类配对并在多个地方使用的字符串文字定义类型别名。由于我使用的API的结构,存在多个类,每个类具有相同名称的属性,但潜在值不同。我想保持我的代码整齐,没有与前缀(一堆全局类型声明MyClassAPropertyValueMyClassBPropertyValue等等),如果我能帮助它。

因此,是否有任何方法可以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";
uck

您不能直接在类内部定义类型(无论是嵌套类,枚举还是字符串文字类型)。

但是,如该答案所示,您可以通过在相同名称的模块中定义嵌套类型来解决此问题。

export class APIObjectA {
    // Here, "Property1Value" refers to the version in APIObjectA
    public get property1(): APIObjectA.Property1Value {
        // Return value of property1 from underlying API data
    }

    public get property2(): APIObjectA.Property2Value {
        // ...
    }
}

module APIObjectA {
    // Valid values in APIObjectA
    export type Property1Value = "possible_value_A" | "possible_value_B";
    export type Property2Value = "possible_value_C" | "possible_value_D";
}

export class APIObjectB {
    // In this context, "Property1Value" refers to the version in APIObjectB
    public get property1(): APIObjectB.Property1Value {
        // ...
    }

    public get property2(): APIObjectB.Property2Value {
        // ...
    }
}

module APIObjectB {
    // Valid values in APIObjectB
    export type Property1Value = "possible_value_E" | "possible_value_F";
    export type Property2Value = "possible_value_G" | "possible_value_H";
}

请注意,对于属性的返回类型,您将需要使用全限定名。例如,您需要使用APIObjectB.Property1Value而不是Property1Value

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 TypeScript 中,是否可以从字符串的输入类型推断出可区分联合的字符串文字类型?

如何从Typescript中的常量定义字符串文字联合类型

是否可以将字符串数组转换为字符串文字联合类型?

TypeScript:根据字符串数组定义联合类型

条件类型和字符串文字+类联合交互

由c ++字符串类定义的字符串文字是否为const char []类型

由c ++字符串类定义的字符串文字是否为const char []类型

检查字符串是否存在于字符串文字联合类型打字稿中

打字稿:枚举中的字符串文字联合类型

是否可以安全地使用“切换FlowType”联合类型(字符串枚举)?

TypeScript:通常基于字符串文字属性推断联合类型成员

是否可以从字符串模板文字中推断出泛型类型

强制更改字符串遵循 Typescript 类型联合

从联合类型创建TypeScript(字符串)枚举?

从 TypeScript 中的模板文字类型中删除字符串

类型注释和字符串文字的区分联合

来自Typescript中变量的动态字符串文字类型

Typescript中带有变量的字符串文字类型

是否可以查看字符串中定义的长度

Typescript使用鉴别符的联合字符串类型创建ADT(区分联合类型)的实例

当与字符串原始类型联合时,使打字稿显示字符串文字的类型提示

在对象文字中进行赋值时,为什么TypeScript将字符串文字联合类型转换为字符串?

如何在 Angular 中创建 TypeScript 文字类型(从字符串到特定字符串)?

在Typescript中,如何使用字符串类型联合约束其他类型或接口的键

将字符串数组转换为字符串文字联合类型

TypeScript:是否可以创建映射的联合类型?

是否可以在打字稿中创建一种类型,以表示除一组字符串文字外的所有字符串?

是否可以在 TypeScript 中使用模板文字生成字符串文字组合?

是否可以使用TypeScript来确定是否所有使用字符串文字并集的类型都至少使用了一次?