【问题标题】:Optional parameters on typescript interfaces?打字稿界面上的可选参数?
【发布时间】:2018-08-05 05:30:26
【问题描述】:

作为explained here? 运算符可用于将函数参数标记为可选。 ? 运算符对接口参数的含义是什么?例如,如果我们有这个打字稿界面:

    export interface Person {
    phone?: number;
    name?: string;
}

还有一个实现接口的类:

class Customer implements Person {
} 

Customer 现在是否正确实现了 Person,因为 Person 接口上的所有属性都是可选的?

【问题讨论】:

  • 一个类是否正确实现了一个接口,可以通过运行 Typescript 编译器来轻松回答。
  • 关于 TS 中接口的提示。这也正确实现了接口:let somebody:Person = {}; 你不需要在一个类上明确地implements Person

标签: javascript angular typescript


【解决方案1】:

简短的回答是肯定的,Customer 正确实现了Person,因为接口的所有字段都是可选的,任何对象都会正确实现接口。

这个接口的用处是:

  • 在实施者网站上,如果声明了任何可选字段,则类型必须对应(因此phone 必须定义为number
  • 在接收方(例如作为函数参数),您只能访问可能属于 Person 的字段(您应该检查它们是否为 undefined),但该函数例如保证它不会访问任何其他字段Person 参数的字段。

【讨论】:

  • 感谢您的详细说明。这正是我正在寻找的解释类型。
  • 不管编译不编译,这不是违反了SOLID中的I吗?接口隔离?当我告诉你我有一个设备(一个类)和一个遥控器(接口)但有一半的按钮对此设备没有任何作用时,这有意义吗?那遥控器是不是太通用了?
  • @MikedeKlerk 由您决定如何定义接口。遥控器可能有任意数量的功能,只是碰巧你有一个没有功能,但是在接口合同中明确说明了这是一种可能性(因为所有成员都是可选的)并且由接口的用户来检查什么他得到了
猜你喜欢
  • 2018-02-04
  • 2020-05-22
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 2016-06-21
  • 2021-12-24
  • 2018-10-03
  • 1970-01-01
相关资源
最近更新 更多