繁体   English   中英

使用角度/打字稿中的另一个函数为接口属性赋值?

[英]Assign a value to an interface property using a function on another in angular / typescript?

我希望一个属性值依赖于 Angular 2+ 中同一接口内的另一个。 目标是避免每次在我的应用程序中使用这个类时调用相同的函数。

像这样的东西:

  export interface PersonItem {

        _id?: number;
       name: string;
       lastName: string;
       fullName: getFullName(this.name, this.lastName)
  }

  function getFullName(name, surname) {

        return (name + ' ' + surname);
   }

您可以在类型脚本中执行以下操作

export interface PersonItem {
  _id?: number;
 name: string;
 lastName: string;
 fullName: Function;
}

let p: PersonItem = {name:"Ankur", lastName:"shah", fullName: function(this){ return this.name + ' ' + this.lastName}};
let temp  = p.fullName();

你已经声明了一个接口。 接口非常适合声明外部世界可以在对象上看到哪些属性和函数。 他们不做的是允许您添加任何实现细节。

实现细节要么以函数的形式出现,要么以类的形式出现。

您当前有一个函数,但想在对象本身上实现它。 为此,您可以创建一个实现该接口的类。 我建议您保留您的界面,并在可能的情况下传递它。 使用IPersonItem的代码并不关心fullName如何实现的,只关心它是否存在。

export interface IPersonItem {
  _id?: number;
  name: string;
  lastName: string;
  fullName: string;
}

export class PersonItem implements IPersonItem {
  constructor(
    public name: string,
    public lastName: string,
    public _id?: number
  ) {
  }

  get fullName() { return `${this.name} ${this.lastName}`; }
}

一些示例用法:

export class MyService {
  getPersonItem(): IPersonItem {
    return new PersonItem('first', 'last', 123);
  }
}

export class MyComponent {
  constructor(private myService: MyService) {}

  ngOnInit() {
    const person: IPersonItem = this.myService.getPersonItem();
    console.log(person.fullName); // "first last"
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM