Property 'name' does not exist on type '{}'.
在Typescript中,声明的变量是类型化的,这意味着声明的变量应该有一个类型,并在编译时引起错误。
它在编译时提供类型安全以避免错误。
在这种情况下,如何为一个对象添加动态属性?
如何在typescript中为一个对象添加动态属性
我们有多种方法可以做到
-使用任何类型
在这里,声明一个类型为any 的对象,它接受任何类型的数据。
var employee: any= {}
employee.name= "john"
console.log(employee.name)
你必须写一段代码将任意类型转换为所需类型,并增加额外的时间来完成。这没有遵循类型安全的原则,并且违背了在typescript中这样做的目的。
使用接口索引类型签名
索引类型签名允许你用声明的类型来存储键值和值。
interface Employee {
[key: string]: any
上面,接口被声明为键和值类型string any 。
创建一个接口的对象,如下所示
你可以只分配字符串键和任何值
obj.name="ram"
obj.salary=5000
console.log(obj) //{ "name": "ram", "salary": 5000}
你可以用简短的语法内联索引签名
var obj: {[k: string]: any} = {};
obj.name="ram"
obj.salary=5000
console.log(obj) //{ "name": "ram", "salary": 5000}
-使用Record类型
类型脚本介绍Record是一个对象,其键类型为K,值类型为T。
这个对象可以存储string key和valueany type
var emp1: Record = {}
emp1.name="ram"
emp1.salary=5000
console.log(emp1)
这是一种更简洁的类型安全和对象继承的方式。创建一个具有共同属性的基础接口
interface BaseObject{
id: string,
name: string,
你可以通过在基接口上扩展额外的必要属性来创建一个新的接口
interface Employee extends BaseObject {
salary: string;
创建一个接口的对象,你可以添加属性
var emp1: Employee= {}
emp1.name= "john"
这为用户扩展对象的行为提供了一种更简洁和可重复使用的方法。
综上所述,你学到了在typescript中向对象添加动态属性的多种方法,并举例说明。
在重用和类型安全方面,我更喜欢把它扩展为一个可重用的、更干净的对象。