gpt4 book ai didi

Typescript 标记的联合类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:33 25 4
gpt4 key购买 nike

我想根据我的函数接收到的接口(interface)来区分一些逻辑。为此,我尝试使用标记的联合类型,例如,

someFunction(arg: TypeA | TypeB): void {
if (arg.kind === "TypeA")
{
// do this
}
else
{
// do that
}
}

在哪里

interface TypeA {
kind: "TypeA";
propertyA: string;
}

interface TypeB {
kind: "TypeB";
propertyB: string;
}

但是如果我想调用这个函数,如果我没有为 kind 提供值,Typescript 会提示,即,

let typeA: TypeA;
typeA = {propertyA: ""}
someFunction(typeA);

TS2322: Type '{ propertyA: string; }' is not assignable to type 'TypeA'.
Property 'kind' is missing in type '{ propertyA: string; }'.

所以我不明白标记类型是如何工作的,如果我每次想要区分时都必须实现标记(上面示例中的kind)。我只能假设我用错了?

最佳答案

你可以定义一个类型保护来做到这一点。它们允许您通过其中一个属性的值或存在来判断参数的类型。

function isTypeA(arg: TypeA | TypeB): arg is TypeA {
return (<TypeA>arg).propertyA !== undefined;
}

function someFunction(arg: TypeA | TypeB): void {
if (isTypeA(arg))
{
arg.propertyA;
}
else
{
arg.propertyB
}
}

您可以阅读更多关于它们的信息 here并检查一个工作示例 here .

关于Typescript 标记的联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189399/

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