首页 文章

TypeScript Union类型编号或特定字符串

提问于
浏览
0

我正在尝试使用typeScript Union Types . 我有一个带有数字属性的类,但我希望它有三个特殊情况:Infinity,None和Auto

Infinity和None分别用 Number.POSITIVE_INFINITYNULL 表示,但我不知道如何处理自动值 .

该值最初出现在表示为字符串的XML文档中 . 例如 <element myValue="123"/> <element myValue="-4096"/> <element myValue="infinity"/> <element myValue="auto"/><element/>

如何创建可用作数字但仍具有可用自动值的联合类型 . 我想到了一个带有数字和枚举的联合类型,但我不确定如何充分利用它 .

有小费吗?

class MyClass {
    name: string;
    duration: number; // Want to support None/Null, Infinity and Auto
}

2 回答

  • 3

    考虑在类型注释中使用字符串文字 'auto'

    class MyClass {
        name: string;
        duration: number | undefined | 'auto';
    }
    

    (这里我使用 undefined 而不是 null 来表示缺失值 . 如果您还没有使用TypeScript 2.0,请省略 undefined . )

    此类型注释允许您将数字(包括 Number.POSITIVE_INFINITY ), undefined'auto' 分配给 duration ,但不能分配任何其他字符串 .

    样品用法:

    var c = new MyClass();
    // ...
    
    if (c.duration === undefined) {
        // ...
    } else if (c.duration === 'auto') {
        // ...
    } else {
        // In this branch, the type of c.duration will be number.
        // ...
    }
    
  • 1

    但我不知道如何处理自动值

    我们也不会 . 您需要举例说明一个自动值,例如是 1 有效的 auto 值 . 我怀疑它是,我怀疑所有数字都是有效的 . 所以我会使用类型注释 duration : number | null

相关问题