考虑一下这段代码
type A = number; declare function f(): A; const a = f(); // `a` is number, not A
为什么TS会出现 a: number 而不是 a: A ?
a: number
a: A
顾名思义,类型别名只是其他类型的不同名称。类型别名不是编译器保证保留的(与接口不同),它应用了一种启发式方法,可以提供最佳的用户体验(在这种情况下,它可能会失败)。
也不是那样 A 和 number 实际上是同一类型。如果你想确保 数字 到 A. 你需要使用 branded types .
A
number
数字
A.
type A = number & { isA: undefined}; declare function f(): A; const a = f(); // `a` is A, not number
play
注:还有一个建议( this 和 this )将品牌打印机制烘焙到typescript中,但在编写时尚未完成。