【问题标题】:interface, how to define default value接口,如何定义默认值
【发布时间】:2018-10-17 15:43:10
【问题描述】:

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

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()]) {
 }

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

它创建了一个 name = null 的人

我该怎么做?

【问题讨论】:

  • 不确定问题是什么,如果我写new Family(""),新对象将有一个成员member taht 将包含一个名为"John" 的人。有什么问题?

标签: angular typescript interface


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    类型脚本遵循OOPS 概念。所以无论 OOPS language 做什么,你都可以做几乎相同的事情。只要关注inheritancevariable initialization,我认为您的实施没有任何问题。它应该按预期工作。

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        类同名就不需要实现接口

            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'
        

        【讨论】:

          猜你喜欢
          • 2016-05-06
          • 2011-03-17
          • 2021-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-01
          相关资源
          最近更新 更多