gpt4 book ai didi

typescript :如何为联合类型中的枚举添加类型保护?

转载 作者:搜寻专家 更新时间:2023-10-30 20:54:22 26 4
gpt4 key购买 nike

以下代码报错:

  1. “instanceof”表达式的左侧必须是“any”类型、对象或类型参数。
  2. 类型'E | C' 不可分配给类型 'E'。类型“C”不可分配给类型“E”。
    enum E { FIRST = 1, SECOND = 2 }; 

class C {
value: E;

constructor(arg: C | E) {
if (arg instanceof C) { // 1.
this.value = arg.value;
} else {
this.value = arg; // 2.
}
}
}

var a: C = new C(E.SECOND);
console.log('a.value = ' + a.value);

var b: C = new C(a);
console.log('b.value = ' + b.value);

尽管有错误,代码似乎可以在 TypeScript Playground 上正常编译并达到预期效果。

最佳答案

两个问题。

编译器中有一个错误,即 instanceof 不允许在联合类型上使用,因为它的一个组成部分不是对象类型。这正在修复 ( https://github.com/Microsoft/TypeScript/issues/2775 )

另一件事是 instanceof 不会导致 else block ( https://github.com/Microsoft/TypeScript/issues/1719 ) 变窄,因为 instanceof 检查失败不会t necessarily 表示对象与指定的接口(interface)不匹配。目前这是“设计使然”的,但我鼓励您发表评论,指出您发现这种行为令人惊讶或不受欢迎(我当然会)。

关于 typescript :如何为联合类型中的枚举添加类型保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com