类中的 Getter 总是未定义的

5

我有一个 TypeScript 类,其中包含一个 getter(它只是多个属性的拼接)。

出于某种原因,即使内部的属性都已定义,getter 始终返回 undefined。

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.

1
类型转换并不会实例化一个类,它只是告诉 TypeScript 编译器 result 应该被视为 Person 类... 而实际上它并不是。 - user13258211
哦,好的。在这种情况下,问题的解决方案是什么? - Nicke Manarin
2个回答

5

强制类型转换并不会实例化一个类,它只是告诉编译器将你的 result 视为一个 Person 类... 但这可能尚未成立。

你需要自行执行你原本期望强制类型转换所执行的操作,在你的 Person 类中创建一个 constructor 并使用 new 关键字实例化一个 Person 的实例。

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

var desc = new Person(result).description;

我已经这样做了,我只是将参数设置为可选的,并返回一个值,以防需要在没有任何数据的情况下实例化。谢谢。 - Nicke Manarin

2
问题在于你将结果强制转换为person而不是实例化一个新的person实例。以下是一个可能的解决方案 -
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接