【发布时间】:2016-02-28 04:20:49
【问题描述】:
换一种说法:
您将如何在 TypeScript 中键入 windowState DOM 属性?
已解决(在 TypeScript 2 中):
declare var windowState: WindowState
const enum WindowState {
STATE_MAXIMIZED = 1,
STATE_MINIMIZED = 2,
STATE_NORMAL = 3,
STATE_FULLSCREEN = 4
}
...
var windowState = 5 // Type Error, as expected!
原始问题:
我如何在 TypeScript 中使用 declare 和 type 来描述代数数据类型?这样做的目的是描述现有的 API。
当我尝试以下操作时,TypeScript 显然会抱怨 type is expected:
type Weather = 'sunny' | 'bad'
我的一个想法是使用 JavaScript 2015 Symbol,但是 TypeScript 似乎不知道这些。
另一个想法是使用 enum,但是 TypeScript 抱怨 member initializer must be constant expression:
const enum Weather {
sunny = 'sunny',
bad = 'bad',
windy = Symbol('windy')
}
我会认为string 常量是一个常量表达式。
【问题讨论】:
-
对于这个特定的例子,你可能会使用
enum(不过需要在一些地方转换成字符串) -
是的,我也会将其添加到问题中,因为
enum并不令人满意 -
TypeScript 确实理解符号。如果您的运行时环境支持,您可以加载
lib.es6.d.ts或复制 Symbol 接口。 -
@Kitson 是否将它们视为常量表达式?
-
TypeScript 1.8 将引入“字符串文字类型”:github.com/Microsoft/TypeScript/pull/5185
标签: typescript algebraic-data-types