class 中的 Getter 始终未定义

Getter in class is always undefined

我有一个打字稿 class,其中包含一个 getter(这只是多个属性的串联)。

由于某些原因,getter总是returns未定义,即使里面的属性都已定义。

import { IdDisplayName } from './';

export class Person {
  id?: number;
  age!: number;
  personType!: IdDisplayName<number>;
  name!: string = '';

  public get description() : string {
    return this.name + ' • ' + (this.personType.displayName ?? 'No type')
      + '/' + this.age;
  }
}

我以 Json 的形式接收数据并像这样转换为 Person:

let person = result as Person;
let desc = person.description; //undefined, never enters the description getter code.

问题是您将结果转换为人而不是实例化人的新实例。这是一个潜在的修复 -

import { IdDisplayName } from './';

export class Person {
  constructor(result: 'your result type here') {
    this.id = result.id;
    this.age = result.age;
    this.personType = result.personType;
    this.name = result.name;
  }
  id?: number;
  age!: number;
  personType!: IdDisplayName<number>;
  name = '';

  public get description(): string {
    return (
      this.name +
      ' • ' +
      (this.personType.displayName ?? 'No type') +
      '/' +
      this.age
    );
  }
}

那么可以这样用-

let person = new Person(result)

转换不会实例化 class,它只是告诉编译器将您的 result 视为 Person class... 这可能不是案例还没有。

你必须做你可能期望演员自己做的事情,在你的 Person class 中创建一个 constructor 并实例化 Person 的实例new key-word.

export class Person {
  constructor(res: any){
    // assign properties
  }
}

var desc = new Person(result).description;