有问题。
将枚举值分配给枚举属性时,收到错误: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];
答案 0 :(得分:1)
枚举转换为普通对象:
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 {...}
的编译代码。