String与String枚举不兼容

时间:2018-04-30 17:40:00

标签: javascript node.js typescript typescript2.0

我有这种类型:

export type BunionLevel = 'foo' | 'bar' | 'baz';

然后我有这个课程:

export class BunionLogger {

  level: BunionLevel;

  constructor(opts?: BunionOpts) {
    this.level = String((opts && (opts.level || opts.maxlevel) || maxLevel || '')).toUpperCase();
  }

}

我得到了这个转换错误:

enter image description here

呃我该怎么办?我不知道该怎么办。我可以这样做:

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
}

1 个答案:

答案 0 :(得分:4)

如果您使用String功能,那么String((opts && (opts.level || opts.maxlevel) || maxLevel || ''))的结果将是string,而不是BunionLevel的值。此外,由于您提供''作为默认设置而使用toUpper,结果肯定不是BunionLevel的有效字符串。

如果您移除StringtoUpper并提供有效的默认设置,则一切正常:

this.level = (opts && (opts.level || opts.maxlevel)) || 'foo';