以下打字稿代码导致错误(打字稿v3.8.3)。为什么?
class A {
public foobar: 'foo' | 'bar' = 'bar';
}
class B extends A {
public foobar = 'foo'; // --> Type 'string' is not assignable to type '"foo" | "bar"'
}
我在下面为这个问题提供了答案,但是我很高兴听到实现相同目的的替代方法,这些替代方法不需要在子类中编写构造函数或复制类型定义。
答案 0 :(得分:0)
似乎'foo'被推断为字符串,这允许B.foobar
被推断为字符串,然后与父类成员A.foobar
的类型冲突。
以下作品,根据我的理解,不会进行任何类型转换:
class A {
public foobar: 'foo' | 'bar' = 'bar';
}
class B extends A {
public foobar: 'foo' | 'bar' = 'foo';
}
以下内容也有效,它迫使打字稿从B.foobar
推断出A.foobar
的类型而不是字符串值。
class A {
public foobar: 'foo' | 'bar' = 'bar';
}
class B extends A {
constructor() {
super();
this.foobar = 'foo';
}
}