TypeScript 唯一类型

arknldoa  于 4个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(39)

🔍 搜索词

"unique type"

✅ 可实现性检查清单

⭐ 建议

有时候,我只需要在我的类型计算中使用一个独特的类型作为标志。如果我使用字符串子类型或其他类型,它就不能很好地标识。例如:

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 关键字以创建一个唯一类型。

💻 用例

  1. 你打算用这个做什么?
    特别是在递归类型定义中控制类型计算。
  2. 目前方法的缺点是什么?
    如果我定义一个唯一符号,它应该产生一个运行时符号。
  3. 在这段时间内你正在使用什么解决方法?
    仔细使用字符串子类型编写标志。
yzuktlbb

yzuktlbb2#

我们是否应该使用它?为什么被关闭了?

q3qa4bjr

q3qa4bjr3#

See #55691 (comment)

vlurs2pr

vlurs2pr4#

unique 快速放入类型空间会变得很奇怪,原因有很多,因为泛型示例化与简单的替换相比,成为一个完全不同的操作。例如,如果你有

type Pair<T> = { x: T, y: T };

// __very__ different from writing { x: unique, y: unique }
type S = Pair<unique>;

这意味着许多常见的身份不再成立。

doinxwow

doinxwow5#

它有一个错误 Type expected. @RyanCavanaugh
declare const _flag: unique symbol; 表示在执行上下文中存在一个唯一的符号常量 _flag ,但没有。这不安全。

相关问题