首页 > 解决方案 > 打字稿中的类型对象是什么?

问题描述

什么是类型对象,何时使用?好像是黑匣子?如果参数可以有未知种类的对象键,应该使用哪种解决方案 A 或 B?

一个

const edit: (value: object) => void = value=> {// do something }

edit({name: "Bob", age: 11})

type JSONObject = { [k: string]: string | number}

const edit: (value: JSONObject ) => void = value=> {// do something }

标签: typescript

解决方案


type是您声明为参考的东西。在您的B示例中,如果您运行以下代码:

const myObject:JSONObject = objFromFunction();
Object.values(myObject).map(objValue => { /* 'objValue' is of type 'string' or 'number' */ });

这比示例 A 更可取,示例 AobjValue的类型为any,它是 TypeScript 环境中的“黑匣子”。

当您声明一个类型时,您正在分配一个可以分配的潜在值的范围。根据edit()使用方式,您可以设置各种类型的策略。


如果您知道该对象将显式存在{name:string, age:number},那么您可以这样声明您的类型:

type Person = { name:string; age:number };

如果您只知道对象属性可能只包含一个字符串或一个数字,那么您可以像您的示例一样声明一个类型,但您可以使用Record

type JSONObject = Record<string, string | number>;

最后,如果您不知道对象中包含的类型,我建议您稍作更改并使用unknown

type JSONObject = Record<string, unknown>;

使用object会将任何属性值标记为any不提供类型保护。unknown为您提供更好的类型保护,我不会在这里讨论。unknown你应该能够找到关于为什么更喜欢的文章和问答any


推荐阅读