代码之家  ›  专栏  ›  技术社区  ›  Marcin Sieradzki

类型按钮中的属性“fit”不能分配给基类型“IButton”中的同一属性。类型“string”不能分配给类型“Fit”

  •  0
  • Marcin Sieradzki  · 技术社区  · 3 年前

    我有一个类按钮,它实现了IButton接口。

    class Button implements IButton {
       public fit = 'medium';
    }
    
    declare type Fit = 'small' | 'medium' | 'large';
    
    export interface IButton {
      fit: Fit;
    }
    

    我希望能够分配 medium 作为 fit 属性,但当我尝试这样做时,TypeScript会抛出一个错误。

    Property 'fit' in type 'Button' is not assignable to the same property in base type 'IButton'.
    Type 'string' is not assignable to type 'Fit'.
    

    是否有其他方式存档此文件?

    2 回复  |  直到 3 年前
        1
  •  1
  •   Tobias S.    3 年前

    当您将变量声明为 public fit = 'medium' ,TypeScript将推断 fit 未来 string 。这与接口不匹配 IButtons 的属性 适合 这是一种更窄的类型。

    您有多个选项可以修复此问题:

    1. 将变量声明为 readonly
    public readonly fit = 'medium'
    
    1. 使用 as const as Fit
    public fit = 'medium' as Fit
    //public fit = 'medium' as const
    
    1. 手动声明正确的类型
    public fit: Fit = 'medium'
    

    注: 只有 视情况而定 或者,第三个选项将允许您修改 适合 在运行时。

        2
  •  1
  •   MikkelDalby    3 年前

    您可以尝试导出枚举拟合,并执行以下操作。

    class Button implements IButton {
       public fit = 'medium' as Fit;
    }