我正在尝试使用typeScript Union Types。 我有一个带有数字属性的类,但我希望它有三种特殊情况:Infinity,None和Auto
Infinity和None分别用Number.POSITIVE_INFINITY
和NULL
表示,但我不知道如何处理自动值。
此值最初出现在表示为字符串的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
}
答案 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