📜  typescript 获取类属性 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:05:39.881000             🧑  作者: Mango

Typescript 获取类属性

在 TypeScript 中,我们可以通过 class 来定义一个类,类里面可以包含属性和方法。有时候我们需要获取类的属性名或者属性值,本文将介绍如何在 TypeScript 中获取类属性。

获取属性名

要获取类的属性名,可以使用 Object.getOwnPropertyNames() 方法,该方法返回一个数组,数组的元素是对象自身的属性名(不包括继承的属性名)。

class Person {
  name: string;
  age: number;
}

const person = new Person();
const propertyNames = Object.getOwnPropertyNames(person);
console.log(propertyNames);  // output: ["name", "age"]
获取属性值

要获取类的属性值,可以使用 obj[key] 或者 obj.property 的方式,其中 key 为属性名, property 为属性名所对应的属性。

class Person {
  name: string;
  age: number;
}

const person = new Person();
person.name = 'Alice';
person.age = 18;

console.log(person['name']);  // output: "Alice"
console.log(person.age);     // output: 18

如果属性名是动态的,可以使用 obj[key] 的方式来获取属性值。

class Person {
  name: string;
  age: number;
}

const person = new Person();
person['name'] = 'Alice';
person['age'] = 18;

console.log(person['name']);  // output: "Alice"
console.log(person['age']);   // output: 18
使用反射获取属性名和值

可以使用 Reflect.ownKeys() 方法来获取对象自身的属性名和 Symbol 属性名,然后通过 obj[propertyName] 或者 obj.propertyName 的方式来获取属性值。

class Person {
  protected name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

const person = new Person('Alice', 18);
const propertyNames = Reflect.ownKeys(person);

for (const name of propertyNames) {
  console.log(`${name}: ${person[name as string]}`);
}

// output: "name: Alice", "age: 18"

其中 Reflect.ownKeys() 方法返回一个数组,包含了对象自身所有的属性名和 Symbol 属性名。需要注意的是,需要将 name 强制转换为字符串类型,否则 TypeScript 会提示错误。