🔍 搜索词
"unique type"
✅ 可实现性检查清单
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的改变
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发射不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、带有JavaScript输出的非ECMAScript语法、JS的新语法糖等)
- 这不是要求添加一个新的实用类型的请求: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- 这个特性将与我们设计目标的其他部分保持一致: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ 建议
有时候,我只需要在我的类型计算中使用一个独特的类型作为标志。如果我使用字符串子类型或其他类型,它就不能很好地标识。例如:
type Flag = 'Flag'
type MyType<T extends string|Flag>=T extends Flag? 'IsFlag':'A normal string'
在代码中,Flag
也是一个字符串。我不想发布一些相互引用的复杂类型,而是使用标志类型,但这对我来说非常有用。
定义一个纯粹的独特类型,没有任何运行时内容。
📃 激励示例
type Flag1 = unique('Flag')
type Flag2 = unique('Flag')
Flag1
不是 Flag2
,就像独特的符号一样。
唯一类型只用于检查它是什么。
将文本传递给 unique
关键字以创建一个唯一类型。
💻 用例
- 你打算用这个做什么?
特别是在递归类型定义中控制类型计算。 - 目前方法的缺点是什么?
如果我定义一个唯一符号,它应该产生一个运行时符号。 - 在这段时间内你正在使用什么解决方法?
仔细使用字符串子类型编写标志。
5条答案
按热度按时间6ie5vjzr1#
related #33038
yzuktlbb2#
我们是否应该使用它?为什么被关闭了?
q3qa4bjr3#
See #55691 (comment)
vlurs2pr4#
将
unique
快速放入类型空间会变得很奇怪,原因有很多,因为泛型示例化与简单的替换相比,成为一个完全不同的操作。例如,如果你有这意味着许多常见的身份不再成立。
doinxwow5#
它有一个错误
Type expected.
@RyanCavanaughdeclare const _flag: unique symbol;
表示在执行上下文中存在一个唯一的符号常量_flag
,但没有。这不安全。