我有以下代码
interface BaseA {
a: number;
}
interface SpecialA extends BaseA {
b: number;
}
type A = BaseA | SpecialA
const a = {
a: 5, b: 5
} as A
console.log(a.b)
我希望代码有效,但我收到错误
Property 'b' does not exist on type 'A'.
Property 'b' does not exist on type 'BaseA'
似乎类型 A 不是我要定义的类型,我希望它等同于以下类型
interface A {
a: number;
b?: number;
}
我的问题是
注意:我需要在某些地方使用 SpecialA 类型,因此不定义它而只定义预期的 A 不是一个选项。
最佳答案
由于 A
是联合,您需要 narrow/discriminate您访问非共享成员的类型。
interface BaseA {
a: number;
}
interface SpecialA extends BaseA {
b: number;
}
type A = BaseA | SpecialA
const a = {
a: 5, b: 5
} as A
if ("b" in a) { // narrowing here
console.log(a.b)
}
Playground
https://stackoverflow.com/questions/72951923/