【问题标题】:Can TypeScript be used to determine if all types in union of string literals are used at least once?是否可以使用 TypeScript 来确定字符串文字联合中的所有类型是否至少使用一次?
【发布时间】:2020-09-11 23:20:57
【问题描述】:

我怀疑这个答案是否定的,但如果你不问,你就不会得到。

假设您有一个字符串文字的联合,并且您希望确保字符串文字中的每个条目至少使用一次。考虑:

type MyEvents = 'User clicks button' | 'User opens menu' | 'User eats pizza'

假设我们非常关心上述每种类型的使用。如果没有使用上述所有内容,则意味着我们没有捕获我们需要的信息。它表示错误状态。

如果编译器可以告诉我们是否没有使用上述之一,那不是很神奇吗?有点像--noUnusedLocals 让您知道您有一个未使用的局部变量或noUnusedParameters 告诉您有一个您没有使用的参数。

这可能吗?

编辑

更具体一点,我是在整个程序的上下文中想象的。

// file1.ts
// ...
trackThatThing('User clicks button')
// ...

// file2.ts
// ...
trackThatThing('User eats pizza')
// ...

会导致错误:“'用户打开菜单'类型未使用”或类似的。鉴于:

// file1.ts
// ...
trackThatThing('User clicks button')
// ...

// file2.ts
// ...
trackThatThing('User opens menu')
// ...

// file3.ts
// ...
trackThatThing('User eats pizza')
// ...

会好的

【问题讨论】:

  • 您的意思是switch 还是什么(在这种情况下,请参见例如stackoverflow.com/q/39419170/3001761)?或者只是在你的代码库中?
  • 一般在代码库中 - 所以如果一个类型没有在整个程序的上下文中使用,它将被视为错误
  • @JohnReilly 不,有noUnused* 标志来覆盖这个
  • 你想要pattern matching,希望很快就会出现。 F# examples
  • ...这有可能在未来理解exhaustive pattern matching

标签: typescript


【解决方案1】:

TypeScript 在检查阶段不会跟踪此类信息。

【讨论】:

  • 我怀疑不是 - 感谢您确认 Ryan;我很感激!
猜你喜欢
  • 2016-07-22
  • 1970-01-01
  • 2018-03-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多