gpt4 book ai didi

Typescript - 基础接口(interface)和扩展接口(interface)的联合类型

转载 作者:行者123 更新时间:2023-12-05 09:27:05 26 4
gpt4 key购买 nike

我有以下代码

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;
}

我的问题是

  1. 为什么我定义的类型 A 与我期望得到的类型 A 不同?
  2. 如何在不手动定义的情况下定义预期的类型 A?

注意:我需要在某些地方使用 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

关于Typescript - 基础接口(interface)和扩展接口(interface)的联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72951923/

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