ts定义对象类型Record<string, any>;和object、Object的区别

Record是TS中的一个高级类型,用于创建索引类型,它的键可以是string,number或symbol,值可以是任意类型。与object类型相比,Record提供了更强的类型安全,允许访问任何属性。而object则不提供这种保证,访问未知属性会报错。Object则更通用,可以表示任何类型,但无法自动获取属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Record 是 TS 内置的一个高级类型,是通过映射类型的语法来生成索引类型的

type Record<K extends string | number | symbol, T> = { 
    [P in K]: T;
}

比如传入 'a' | 'b' 作为 key,1 作为 value,就可以生成这样索引类型:

type res = {
  a: 1,
  b: 1
}
type res = Record<'a' | 'b', 1>

所以这里的 Record<string, any> 也就是 key 为 string 类型,value 为任意类型的索引类型,可以代替 object 来用,更加语义化一点:

type res = {
  [x: string]: any
}
type res = Record<string, any>

Record 与 object区别

TypeScript允许访问类型Record<any, any>对象得任何属性,即使特定键未知

let a: Record<any, any>;
a.foo; // works

object对象上,键不会被假定为any,TypeScript不知道哪些密钥实际存在,但它不允许访问任何密钥

let b: object;
a.foo; //  error: Property "foo" does not exist on type "object" 错误:类型“object”上不存在属性“foo”

object与Object 使用区别

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

object类型只能定义对象类型,不能定义其他类型

 

Object 也是不可以自动获取定义的对象上的属性和方法,

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

Object类型可以定义任何类型

var a: Object = []

Object只能赋给任意值,不能调用方法

参考:

真实案例说明 TypeScript 类型体操的意义 - 知乎

TS学习 unknown、any、 object、Object 的区别使用_ts object_你还差的远呢。的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值