[web教学] ts界说对象类型Record<string, any>;和object、Object的区别

[复制链接]
查看770 | 回复0 | 2023-8-23 12:08:46 | 显示全部楼层 |阅读模式 来自 中国北京
Record

Record 是 TS 内置的一个高级类型,是通过映射类型的语法来生成索引类型的:
  1. type Record<K extends string | number | symbol, T> = {
  2.     [P in K]: T;
  3. }
复制代码
比如传入 'a' | 'b' 作为 key,1 作为 value,就可以生成这样索引类型:
  1. type res = {
  2.   a: 1,
  3.   b: 1
  4. }
  5. type res = Record<'a' | 'b', 1>
复制代码
以是这里的 Record<string, any> 也就是 key 为 string 类型,value 为恣意类型的索引类型,可以取代 object 来用,更加语义化一点:
  1. type res = {
  2.   [x: string]: any
  3. }
  4. type res = Record<string, any>
复制代码
Record 与 object区别

TypeScript允许访问类型Record<any, any>对象得任何属性,纵然特定键未知
  1. let a: Record<any, any>;
  2. a.foo; // works
复制代码
object对象上,键不会被假定为any, 与Record<any, ...>一样,TypeScript不知道哪些密钥实际存在,但它不允许访问任何密钥
  1. let b: object;
  2. a.foo; //  error: Property "foo" does not exist on type "object" 错误:类型“object”上不存在属性“foo”
复制代码
object与Object 使用区别

object界说是一个对象类型,不能自动获取对象上的属性和方法

object类型只能界说对象类型,不能界说其他类型
 
Object 也是不可以自动获取界说的对象上的属性和方法,

 但是可以获取对象自身上的属性和方法


参考;真实案例说明 TypeScript 类型体操的意义 - 知乎
TS学习 unknown、any、 object、Object 的区别使用_ts object_你还差的远呢。的博客-CSDN博客

来源:https://blog.csdn.net/qq_37548296/article/details/130367011
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则