ts声明object类型访问属性报错
发布于 4 年前 作者 zhsonga 4048 次浏览 来自 问答
  let o: object = { x: 3 }
  o.x = 2

image.png

刚开始系统学习ts 不理解为什么ts要如此设计
有大佬能回答一下嘛

6 回复
let o: {x: number} = { x: 3 }
o.x = 2

你应该这么写才对 类型 我理解是对变量的描述

你给声明成Object类型了,原生Object类型肯定没有你的属性,,要不你就声明成{x: number}, 要不就不声明让ts自己推断,,你这想把二者结合自相矛盾,没法判断你赋值的是否合法了

楼上说的没错,你想声明一个属性不限的Object可以用:

const o: Record<string, any> = {};
o.x = 2;

@ganshiqingyuan 明白了 object仅代表{}

@nigel Record是声明的类型嘛 ? <string,any>又是代表什么意思 刚开始学习ts并不懂

@zhsonga Record是一个UtilityType,类似于语法糖,相当于:

const o: {
  [key: string]: any;
} = {};
o.x = 2;

尖括号里第一个string表示对象是key是string类型,any表示值是any类型 其他官方的UtilityTypes参考: https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt

回到顶部