gpt4 book ai didi

javascript - 如何在 typescript 中使用联合类型

转载 作者:行者123 更新时间:2023-12-03 21:04:48 26 4
gpt4 key购买 nike

我在一个项目中使用 typescript ,在其中的某些部分我必须使用联合类型。但是我收到了一些奇怪的错误消息,我不知道如何处理。
考虑以下类型:

type body = {
[_: string]:
| 'boolean'
| 'number'
| 'string'
| {
type: 'boolean' | 'number' | 'string'
optional?: boolean
}
| {
type: 'array'
items: 'boolean' | 'string' | 'number'
optional?: boolean
[_: string]: any
}
}
我正在使用 [_: string]:因为我应该能够使用任意键。该值可以是指示类型的字符串,也可以是提供更多详细信息的对象。
现在考虑以下函数:
function show(data: body) {
console.log(data)
}
当我使用以下对象调用上述函数时:
const data = {
username: { type: 'string', optional: false },
address: { type: 'string' },
city: 'string'
}
typescript 给出以下错误:

Argument of type '{ username: { type: string; optional: boolean; }; address: { type: string; }; city: string; }' is not assignable to parameter of type 'body'.


Property 'username' is incompatible with index signature.


Type '{ type: string; optional: boolean; }' is not assignable to type '"string" | "number" | "boolean" | { type: "string" | "number" | "boolean"; optional?: boolean | undefined; } | { [_: string]: any; type: "array"; items: "string" | "number" | "boolean"; optional?: boolean | undefined; }'.


Property 'items' is missing in type '{ type: string; optional: boolean; }' but required in type '{ [_: string]: any; type: "array"; items: "string" | "number" | "boolean"; optional?: boolean | undefined; }'.


我该如何解决这个问题?
谢谢

最佳答案

您可以明确声明您的属性是什么类型 data

const data: body = {
username: { type: 'string', optional: false },
address: { type: 'string' },
city: 'string'
}
或投它
const data = {
username: { type: 'string', optional: false },
address: { type: 'string' },
city: 'string'
} as body;

关于javascript - 如何在 typescript 中使用联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67909614/

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