类型 Button' 中的 属性 'fit' 不可分配给基类型 'IButton' 中的相同 属性。类型 'string' 不可分配给类型 'Fit'

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

我有一个 class 按钮,它实现了 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'.

是否有其他存档方式?

当您将变量声明为 public fit = 'medium' 时,TypeScript 会将 fit 的类型推断为 string。这与接口 IButtons 的 属性 fit 不匹配,后者属于较窄的类型。

您有多种选择来解决这个问题:

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

注意:只有 as Fit 或第三个选项可以让您在运行时修改 fit 的值。

您可以尝试导出 Enum Fit 并执行以下操作。

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