打字稿界面上的可选参数?

     2023-03-13     224

关键词:

【中文标题】打字稿界面上的可选参数?【英文标题】: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 【参考方案1】:

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

这个接口的用处是:

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

【讨论】:

感谢您的详细说明。这正是我正在寻找的解释类型。 不管编译不编译,这不是违反了SOLID中的I吗?接口隔离?当我告诉你我有一个设备(一个类)和一个遥控器(接口)但有一半的按钮对此设备没有任何作用时,这有意义吗?那遥控器是不是太通用了? @MikedeKlerk 由您决定如何定义接口。遥控器可能有任意数量的功能,只是碰巧你有一个没有功能,但是在接口合同中明确说明了这是一种可能性(因为所有成员都是可选的)并且由接口的用户来检查什么他得到了

基于可选参数存在而不使用函数重载的打字稿函数返回类型

】基于可选参数存在而不使用函数重载的打字稿函数返回类型【英文标题】:Typescriptfunctionreturntypebasedonoptionalparameterpresencewithoutusingfunctionoverloads【发布时间】:2021-01-2308:14:13【问题描述】:Typescriptplayground我的目标是根据可选... 查看详情

如何在打字稿中使用可选参数调用类构造函数[重复]

】如何在打字稿中使用可选参数调用类构造函数[重复]【英文标题】:Howtocalltheclassconstructorwithoptionalparametersintypescript[duplicate]【发布时间】:2021-06-1904:25:24【问题描述】:exportdefaultclassAreaparam1:String;param2:String;param3:String;constructor... 查看详情

打字稿'可选'(可为空)'?语法不起作用(部分)

】打字稿\\\'可选\\\'(可为空)\\\'?语法不起作用(部分)【英文标题】:Typescript\'optional\'(nullable)\'?\'syntaxnotworking(partially)打字稿\'可选\'(可为空)\'?语法不起作用(部分)【发布时间】:2015-03-1110:40:12【问题描述】:我想... 查看详情

打字稿:通过传入命名参数的构造函数创建类?

】打字稿:通过传入命名参数的构造函数创建类?【英文标题】:Typescript:Createclassviaconstructorpassinginnamedparameters?【发布时间】:2018-01-1210:18:11【问题描述】:我有一个类,其中定义了带有3个参数的构造函数,这些参数都是可选... 查看详情

函数的打字稿联合/交集类型

】函数的打字稿联合/交集类型【英文标题】:Typescriptunion/intersectiontypesforfunctions【发布时间】:2022-01-1309:49:47【问题描述】:当我有不同数量的参数和返回类型时,我试图了解如何指定类型(对于函数)。这个函数可以:接受2... 查看详情

打字稿删除可选属性

】打字稿删除可选属性【英文标题】:typescriptremoveoptionalproperty【发布时间】:2019-04-1802:33:37【问题描述】:我正在尝试为构建器构建动态类型exporttypeBuilder<T,KextendskeyofT>=[PinK]:(value:T[P])=>Builder<T,K>;&build():Readonly<T&... 查看详情

如何在打字稿中“填写”通用参数

】如何在打字稿中“填写”通用参数【英文标题】:Howto"fillin"genericparameterintypescript【发布时间】:2021-05-2122:20:50【问题描述】:假设我有一个像这样的通用打字稿函数:functiondoThing<T>(param:T):T//...我有一个像这样的... 查看详情

打字稿传播参数如何测试是不是为空?

】打字稿传播参数如何测试是不是为空?【英文标题】:typescriptspreadparamshowtotestifempty?打字稿传播参数如何测试是否为空?【发布时间】:2020-03-3121:19:20【问题描述】:对于函数参数上的扩展运算符相当简单的问题,我无法找到... 查看详情

如何使用可选的唯一字符串定义数组打字稿接口?

】如何使用可选的唯一字符串定义数组打字稿接口?【英文标题】:Howtodefinearraytypescriptinterfacewithoptionaluniquestrings?【发布时间】:2020-09-0412:55:08【问题描述】:我想定义一个带有可选字符串值的接口。比如:interfaceIEntityvalues:[\'... 查看详情

Vue路由器上的可选参数

】Vue路由器上的可选参数【英文标题】:OptionalParameteronVueRouter【发布时间】:2019-09-1403:31:19【问题描述】:所以我有一个项目页面,当我点击一个项目时,我想转到该项目的项目详细信息页面。所以我正在使用动态路线。我作... 查看详情

用玩笑模拟打字稿界面

】用玩笑模拟打字稿界面【英文标题】:Mockatypescriptinterfacewithjest【发布时间】:2019-02-0621:16:41【问题描述】:是否可以用jest模拟typescript界面?例如:importIMultiplierfrom"./IMultiplier";exportclassMathmultiplier:IMultiplier;publicmultiply(a:number,b:... 查看详情

如何覆盖打字稿中的属性?

】如何覆盖打字稿中的属性?【英文标题】:HowdoIoverrideapropertyintypescript?【发布时间】:2016-10-0823:15:27【问题描述】:由于当前的语言限制,这可能是不可能的,但我使用的是最新的TS(1.8.10),并且遇到了ui-grid类型的问题。IGridOp... 查看详情

markdown打字稿界面类型(代码片段)

查看详情

typescript打字稿界面类型函数(代码片段)

查看详情

通过打字稿的界面来反应状态[重复]

】通过打字稿的界面来反应状态[重复]【英文标题】:Passtypescript\'sinterfacetoreactstate[duplicate]【发布时间】:2020-08-2101:14:06【问题描述】:我是TypeScript的新手。我想通过打字稿的界面来反应状态,然后渲染状态。但是我不知道如... 查看详情

打字稿角度指令上的控制器

】打字稿角度指令上的控制器【英文标题】:controlleronatypescriptangulardirective【发布时间】:2015-07-1922:27:15【问题描述】:当控制器用打字稿编写并由指令调用时,绑定似乎不起作用。这是指令importcontroller=require(\'framework/frameworkCo... 查看详情

typescript记录良好的打字稿界面(代码片段)

查看详情

如何扩展“Window”打字稿界面

】如何扩展“Window”打字稿界面【英文标题】:Howtoextendthe\'Window\'typescriptinterface【发布时间】:2015-09-0617:59:36【问题描述】:在我的示例中,我正在尝试扩展TSWindow界面以包含fetch的polyfill。为什么不重要。问题是“我如何告诉TS... 查看详情