繁体   English   中英

如何在 Typescript 中键入 object 密钥?

[英]How to type an object key in Typescript?

我有一个简单的 function 在参数中采用 object。 为了只接收有效数据,我需要输入 object 的密钥,如下所示:

 type DataType = "about" | "favorites" | "username"; type UpdatedData = { [key in DataType]: any }; function onSave (updatedData: UpdatedData){ //do stuff } // in a component const onClickSave = () => onSave({ "about": text });

Typescript 抛出以下错误:

'{ about: text; 类型的参数 }' 不可分配给“UpdatedData”类型的参数。 输入'{关于:文本; }' 缺少“UpdatedData”类型的以下属性:收藏夹、用户名

如何解决这个问题? 当然,我可以写[key: string]而不是[key in DataType] ,但这样打字就没用了。

由于UpdatedData的属性可以是可选的,只需添加? 使它们成为可选的。

编辑:正如@Jérémie B 提到的那样,仍然允许使用空的{}

type DataType = "about" | "favorites" | "username";
type UpdatedData = { [key in DataType]?: any };
function onSave (updatedData: UpdatedData){
}
const text = "hello"

const onClickSave = () => onSave({ "about": text });

尝试这个:

type DataType = "about" | "favorites" | "username";
type Expand<U> = U extends string ? { [key in U]: any } : never

type UpdatedData = Expand<DataType>

TS游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM