2016-11-15 59 views
0

我正在试验typeScript联合类型。 我有一个数字属性的类,但我希望它有三个特殊情况:无限,无和自动TypeScript Union类型编号或特定字符串

无限和无可以Number.POSITIVE_INFINITYNULL分别表示,但我不知道该怎么办关于自动价值。

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

我怎样才能创建一个可以用作数量,但仍然有可用的自动值的联合类型。我想到了一个带有数字和Enum的联合类型,但我不知道如何从中获得最大收益。

任何提示?

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

回答

1

,但我不知道该怎么办了自动值

都不愿我们。您需要举例说明一个自动值,例如是1有效的auto值。我怀疑这是,我怀疑所有号码是有效的。所以我会用类型标注duration : number | null

+0

1不是一个自动值。自动是它自己的值,它应该触发特殊的逻辑,所以我需要使用“自动”作为值,因为我可以使用“空”。迈克尔刘的答案看起来像我所需要的。 – user3336731

3

考虑使用字符串字面'auto'在你的类型注释:

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

(这里我用undefined,而不是null代表不存在的值。如果你还没有使用打字稿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. 
    // ... 
} 
+0

这看起来很棒!正是我在找的!我更早地查看了字符串文字,但是我得到了编译器错误。也许我正在使用打字稿编译器的旧版本。将考虑升级到TypeScript 2.0。 – user3336731

+1

@ user3336731:在TypeScript 1.8中引入了字符串文字类型。 –