TypeScript 使'typeof'上的类型保护成为传递性的,

fv2wmkja  于 6个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(86)

TypeScript版本: 2.7.0
搜索词:

typeof + transitive + type guard + typeof same

代码

function test(a: string | number, b: string | number) {
  if (typeof a === typeof b && typeof a === 'string') return b.length
}

预期行为:

变量 b 应被Assert为字符串类型。

实际行为:

TS报告: Property 'length' does not exist on type 'string | number'.b.length

Playground链接:

Playground

相关问题:

oknwwptz

oknwwptz1#

这可能会非常有用。
另一个真实生活的例子:

type FormStep = 'step1' | 'step2' | 'step3' ...

function view(step: FormStep, data: ...) {
   if (step === 'step1' && canAccessStep1(data.step1relatedStuff))
      return step1View(data.step1relatedStuff)

   if (step === 'step2' && canAccessStep2(data.step2relatedStuff))
     return step2View(data.step2relatedStuff)

   // The compiler can't infer that one anymore, because of the &&s above
   else
      return defaultView()
}

这似乎与控制流分析中的限制类似;如果不是,我可以创建一个新的工单。

kxxlusnw

kxxlusnw2#

Any plan on this feature?

相关问题