【问题标题】:Why can't I return a string literal type in TS为什么我不能在 TS 中返回字符串文字类型
【发布时间】:2021-03-28 15:48:26
【问题描述】:

我不明白以下错误:

type Prefix = 'Ms' | 'Mrs' | 'Mr'

const broken = <T extends Prefix>(prefix: T): T => {
    // do something
    return 'Ms';  
 
    // If I do `return 'Ms' as 'Ms'` then it works

}

const works = <T extends Prefix>(prefix: T): T => {
    // do something
    return p;
}

const alsoWorks = (): Prefix => {
    // do something
    return 'Ms';
}

broken的方法给我

类型“Ms”不可分配给类型“T”。 '"Ms"' 可分配给 'T' 类型的约束,但 'T' 可以用 约束“前缀”的不同子类型。

不知道为什么这个方法不起作用,但其他两个起作用?

【问题讨论】:

  • works 确实是return prefix,不是吗?或者至少 p 被声明为 T 类型。
  • "如果我这样做return 'Ms' as 'Ms',那么它可以工作" - it doesn't for me。你的意思是return 'Ms' as T?这可以绕过类型检查器,但仍然会被破坏。

标签: javascript node.js typescript


【解决方案1】:

TypeScript 抱怨以下调用不起作用:

const res: 'Mr' = broken<'Mr'>('Mr');

如果 T 被实例化为 Ms 以外的其他值,则您的 return 'Ms' 违反了返回类型 T

【讨论】:

    【解决方案2】:

    我想你正在寻找 -

    broken<Prefix>('Ms')
    

    broken('Ms' as Prefix)
    

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 2018-03-27
      • 2013-04-02
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多