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

时间:2016-11-15 13:15:11

标签: typescript types typescript2.0 union-types

我正在尝试使用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 个答案:

答案 0 :(得分: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)

  

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

我们也不会。您需要举例说明自动值,例如是BEGIN DECLARE dayHour INT DEFAULT 0; WHILE (DATE(earlyDate) < DATE(lateDate) OR (DATE(earlyDate) = DATE(lateDate) AND HOUR(earlyDate) < HOUR(lateDate))) DO IF WEEKDAY(earlyDate) NOT IN (5,6) AND earlyDate NOT IN (SELECT HolidayDate FROM hr_holidays) THEN SET dayHour = dayHour + 1; END IF; SET earlyDate = DATE_ADD(earlyDate, INTERVAL 1 HOUR); END WHILE; RETURN dayHour; END 有效BEGIN DECLARE dayCount INT DEFAULT 0; WHILE DATE(earlyDate) < DATE(lateDate) DO IF WEEKDAY(earlyDate) NOT IN (5,6) AND earlyDate NOT IN (SELECT HolidayDate FROM hr_holidays) THEN SET dayCount = dayCount + 1; END IF; SET earlyDate = DATE_ADD(earlyDate, INTERVAL 1 DAY); END WHILE; RETURN dayCount; END 值。我怀疑它是,我怀疑所有号码都有效。所以我会使用类型注释1