打字稿类型'字符串'不能分配给类型(枚举)

时间:2017-08-05 09:25:49

标签: typescript

有问题。

将枚举值分配给枚举属性时,收到错误:Type 'string' is not assignable to type 'CountryCode'. 我认为我不应该得到属性和值相同enum类型

具有enum属性的服务:

@Injectable()
export class UserData {
  private _country_code: CountryCode;
  private _currency_code: CurrencyCode;

  constructor() { }


  get country_code(): CountryCode {
    return this._country_code;
  }

  set country_code(value: CountryCode) {
    this._country_code = value;
  }
  get currency_code(): CurrencyCode {
    return this._currency_code;
  }
  set currency_code(value: CurrencyCode) {
    this._currency_code = value;
  }
}

枚举

export enum CountryCode {
  TH,
  BGD,
}

有错误的用例:

this.userData.country_code = CountryCode[data.country_code];

2 个答案:

答案 0 :(得分:1)

TypeScript中的

枚举转换为普通对象:

CountryCode[CountryCode["TH"] = 0] = "TH";
CountryCode[CountryCode["BGD"] = 1] = "BGD";

接下来,有两种方法可以使用它们:

name:  CountryCode.TH <-- 0    (number)
index: CountryCode[0] <-- 'TH' (string)
                               ^^^^^^^

如果您尝试将其分配给 CountryCode 类型的变量,则后者会抛出错误。所以我相信这就是这里发生的事情。 请参阅typescript playground上的此示例。

但是,鉴于上述输出,这应该有效:

this.userData.country_code = data.country_code;
OR
this.userData.country_code = CountryCode[CountryCode[data.country_code]];

但后者并没有多大意义。

答案 1 :(得分:0)

data.country_code可能已经是CountryCode类型,因此this.userData.country_code = data.country_code;就足够了。调用CountryCode[...]在整数和字符串表示之间进行转换:

CountryCode[CountryCode["TH"] = 0] = "TH";
CountryCode[CountryCode["BGD"] = 1] = "BGD";

enum CountryCode {...}的编译代码。