CNode

ts声明object类型访问属性报错

问答
Zzhsonga发布于6 年前最后回复6 年前6 回复5442 浏览0 收藏
  let o: object = { x: 3 }
  o.x = 2

image.png

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

查看回复

回复 (6)

C
cWatermelon#1·6 年前
let o: {x: number} = { x: 3 }
o.x = 2

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

G
ganshiqingyuan#2·6 年前

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

N
nigel#3·6 年前

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

const o: Record<string, any> = {};
o.x = 2;
Z
zhsonga#5·6 年前
引用 nigel楼上说的没错,你想声明一个属性不限的Object可以用:

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

N
nigel#6·6 年前
引用 zhsonga@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

参与回复
登录后即可参与回复。登录