【发布时间】:2019-08-27 02:56:08
【问题描述】:
我正在使用枚举来实现名义输入(例如在 TypeScript Deep Dive 书中建议的):
enum ExampleIdBrand {}
export type ExampleId = ExampleIdBrand & string
const exampleId: ExampleId = '42' as ExampleId
const m1 = (e: ExampleId) => e.toUpperCase()
m1(exampleId) // ✅
到目前为止,一切都按预期进行。但是,如果我将方法更改为接受(更广泛的)联合类型,编译器将不再接受我的exampleId:
const m2 = (e: ExampleId | 'whatever') => e.toUpperCase()
m2('whatever') // ✅
m2(exampleId) // ???? Does not compile
为什么最后一行编译得不好? (TS 3.3.4000)
【问题讨论】:
-
嗨,Rahel,您使用特殊方言吗? .toUpperCase() 是一个函数,它需要大括号。
-
没有特殊的方言,只是我马虎——会解决的,tx!
-
@DanielDietrich 它也可以这样工作.. 它只是做了一些不同的事情..
-
是的,我已经摆弄了一下。
const exampleId: ExampleId = '42' as ExampleId;的演员阵容已经是一种气味。如果我们删除演员表并使 ExampleId 成为字符串export type ExampleId = string;,它就可以工作。似乎无法使用枚举创建 ~~union~~ 交集类型。会google一下... -
好吧,但是我们失去了名义上的打字(netzwerg.ch/blog/2018/11/21/react-redux-typescript/#5)
标签: typescript types union-types