我有这种类型:
export type BunionLevel = 'foo' | 'bar' | 'baz';
然后我有这个课程:
export class BunionLogger {
level: BunionLevel;
constructor(opts?: BunionOpts) {
this.level = String((opts && (opts.level || opts.maxlevel) || maxLevel || '')).toUpperCase();
}
}
我得到了这个转换错误:
呃我该怎么办?我不知道该怎么办。我可以这样做:
this.level = <BunionLevels> String((opts && (opts.level || opts.maxlevel) || maxLevel || '')).toUpperCase();
但演员似乎没必要......?
根据要求,BunionOpts
看起来像:
export interface BunionOpts {
level?: BunionLevel
maxlevel?: BunionLevel
appName?: string
name?: string
fields?: object
}
答案 0 :(得分:4)
如果您使用String
功能,那么String((opts && (opts.level || opts.maxlevel) || maxLevel || ''))
的结果将是string
,而不是BunionLevel
的值。此外,由于您提供''
作为默认设置而使用toUpper
,结果肯定不是BunionLevel
的有效字符串。
如果您移除String
和toUpper
并提供有效的默认设置,则一切正常:
this.level = (opts && (opts.level || opts.maxlevel)) || 'foo';