javascript - 如何在打字稿中使用联合类型
问题描述
我在一个项目中使用打字稿,在其中的某些部分我必须使用联合类型。但是我收到了一些奇怪的错误消息,我不知道如何处理。考虑以下类型:
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'
}
打字稿给出以下错误:
类型参数 '{ username: { type: string; 可选:布尔值;}; 地址:{类型:字符串;}; 城市:字符串;}' 不可分配给“body”类型的参数。
属性“用户名”与索引签名不兼容。
类型'{类型:字符串;可选:布尔值;}' 不可分配给类型 '"string" | "数字" | “布尔” | {类型:“字符串”| "数字" | “布尔”;可选?:布尔值 | 不明确的; } | { [_:字符串]:任何;类型:“数组”;项目:“字符串”| "数字" | “布尔”;可选?:布尔值 | 不明确的; }'。
类型 '{ type: string; 中缺少属性 'items' 可选:布尔值;}' 但在类型 '{ [_: string]: any; 类型:“数组”;项目:“字符串”| "数字" | “布尔”;可选?:布尔值 | 不明确的; }'。
我该如何解决这个问题?谢谢
解决方案
您可以明确声明您的属性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;
推荐阅读
- angular - ViewChild 未在 IONIC 中定义
- c# - 加速应用程序“Linq 或存储过程”性能的最佳方法是什么
- java - 在java中将类类型保存为Type数据类型
- django - ElasticSearch_ModelFieldNotMappedError
- amazon-s3 - PySpark 将 DataFrame 分区写入 S3
- sql - SSMS 替换字符串中引号外的所有逗号
- java - 自定义图形 - Apache POI
- php - Laravel 本地化翻译不起作用,只显示默认语言
- android - attachBaseContext 的作用是什么?
- regex - 如何在 nltk 语法中直接使用单词