gpt4 book ai didi

数组和对象类型的 typescript 联合

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

Typescript 编译器 在我尝试使用联合或多个类型/接口(interface)时不断抛出错误。

My requirement

我从服务器收到一个对象作为响应,其中一个键 ('errorMessages') 的数据类型为 string[],另一个键 ('数据') 可以是对象数组。我为此编写了一个 interface,它应该如下所示:

interface MyServerResponse {
errorMessages: string[];
data: {
headers: string[];
body: any[][];
} | any[]>;
}

Received compiler error on trying to access 'headers'

属性'headers' 不存在于类型'any[] | { 标题:字符串[];正文:任何[][]; }'

难道不能像 number | 那样使用 union 来实现吗? bool 值, 字符串 | null 等?

最佳答案

当你有一个类型联合时,你只能访问所有类型共有的成员。如果你想说它是其中之一,你需要一个 type guard让编译器知道它是正确的类型:

// this type isn't needed but it makes the code more readable
type headersBody = { headers: string[]; body: any[][] };

function isHeadersBody(obj: headersBody | any[]): obj is headersBody {
return !Array.isArray(obj);
// or better yet
// return Array.isArray(obj["headers"]) && Array.isArray(obj["body"]);
}

let obj: headersBody | any[];

if (isHeadersBody(obj)) {
console.log(obj.body.length);
}

关于数组和对象类型的 typescript 联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51519831/

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