繁体   English   中英

接口,如何定义默认值

[英]interface, how to define default value

我正在尝试在我的模型中使用接口并为其创建默认值。

export interface IPerson {
  id: string;
  name: string;
}

class Person implements IPerson {
   id = '';
   name = 'John';
}

export class Family {
 constructor(public address: string,
             public members: Person[] = [new Person()]) {
 }

所以,我想要的是一个家庭,当这个人没有名字时,默认是John。

它创建了一个 name = null 的人

我该怎么做?

Typescript 是一种定义值类型的工具,而不是值本身 您不能将该值定义为接口。

您可以做的是设置Person类的默认值:

class Person implements IPerson {
   constructor(private id='', private name= 'John') {
   }
}

因此,每当您使用new Person()调用构造函数时,它都会创建一个具有默认值的实例。

Type Script 遵循OOPS概念。 因此,无论OOPS language做什么,您几乎都可以做同样的事情。 只要关注inheritancevariable initialization ,我在您的实现中看不到任何问题。 它应该按预期工作。

您可以在此处查看工作副本 - https://stackblitz.com/edit/angular-dbb7ij

注意您的类Family有 2 个parameters first一个是address ,这是required字段,因为您没有提供任何default值。 第二个parameterUsers array ,它是optional因为default值是新用户的 1 个条目的数组。

我对 typescript angularJS 语法非常陌生,但是您不应该像这样创建 Person 类而不是 IPerson 接口的数组:

export class Family {
 constructor(public address: string,
         public members: Person[] = [new Person()]) {
}

如果类具有相同的名称,则无需实现接口

    export interface Person {
      id?: string;
      name?: string;
    }

    export class Person {
      constructor(person?: Person) {
        return {
          id: person ? person.id : '',
          name: person ? person.name : 'John',
        }
      }
    }

    const person = new Person(); // id = '', name = 'John'
    const person2 = new Person({name: 'Morpheus'}); // id = '', name = 'Morpheus'

暂无
暂无

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

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