打字稿函数接口

     2023-02-22     70

关键词:

【中文标题】打字稿函数接口【英文标题】:Typescript Function Interface 【发布时间】:2013-01-26 15:40:08 【问题描述】:

为什么 Typescript 没有警告我我定义的函数与接口声明不匹配,但如果我尝试调用该函数,它会警告我。

interface IFormatter 
    (data: string, toUpper : boolean): string;
;

//Compiler does not flag error here.
var upperCaseFormatter: IFormatter = function (data: string) 
    return data.toUpperCase();
  

upperCaseFormatter("test"); //but does flag an error here.

【问题讨论】:

【参考方案1】:

该接口确保实现该接口的所有函数调用者都提供所需的参数 - datatoUpper

因为 TypeScript 理解 JavaScript 不介意您传递未使用的参数,所以它巧妙地在实现中允许这样做。

为什么会这样?因为这意味着您可以替换接口的任何实现而不影响调用代码。

示例:您可以替换任一 IFormatter 实现并且代码有效。

interface IFormatter 
    (data: string, toUpper: boolean): string;
;

var upperCaseFormatter: IFormatter = function (data: string) 
    return data.toUpperCase();


var variableCaseFormatter: IFormatter = function (data: string, toUpper: boolean) 
    if (toUpper) 
        return data.toUpperCase();
    

    return data.toLowerCase();


// Switch between these at will
//var formatter = upperCaseFormatter;
var formatter = variableCaseFormatter;

formatter("test", true);

如果 TypeScript 不这样做,您的 upperCaseFormatter 必须有一个名为 toUpper 的参数,该参数未在函数中的任何地方使用 - 这会降低代码的可读性。

【讨论】:

但是使用upperCaseFormatter 有一个冗余的布尔值:upperCaseFormatter("test", true); // excluding the 'true' will result in a compiler warning。因此,接口是错误的,应该是:interface IFormatter (data: string, toUpper? : bool): string; 但这意味着您可以只使用variableCaseFormatter('test'); 调用variableCaseFormatter,而无需指定toUpper,尽管它在函数签名中。有关我当前困惑的更简单示例,请在此处查看我的问题:***.com/questions/23305020 @AJP 如果您正在编写干净的代码,那么您永远不会编写可变大小写格式化程序。你会为上写一个类,为下写一个类,并完全避免讨厌的布尔参数。 @AJP 如果你直接调用upperCaseFormatter,接口是无关紧要的。 有没有更好的语法来为对象方法提供这样的函数接口?例如。 myMethod() return;

打字稿中的泛型函数找不到接口属性

】打字稿中的泛型函数找不到接口属性【英文标题】:Genericsfunctionintypescriptcan\'tfindinterfaceproperty【发布时间】:2017-05-2913:26:33【问题描述】:我正在尝试使用泛型在打字稿中创建以下函数,但它向我显示以下错误:“\'CustomerInte... 查看详情

打字稿不会缩小函数构造函数

】打字稿不会缩小函数构造函数【英文标题】:Typescriptdoesn\'tnarrowonfunctionconstructor【发布时间】:2022-01-1517:24:25【问题描述】:我正在使用一个名为DNSHandler的构造函数,其接口如下所示:interfaceDNSHandlerreceived:Partial<DNSStandardQue... 查看详情

打字稿函数类型分配问题

】打字稿函数类型分配问题【英文标题】:Typescriptfunctiontypeassignmentissue【发布时间】:2018-10-1112:49:49【问题描述】:我正在尝试在我的应用程序中使用json-rpc-ws库,但我遇到了由库定义的处理程序函数签名问题。该库在声明文件... 查看详情

打字稿中的重载函数类型

】打字稿中的重载函数类型【英文标题】:Overloadedfunctiontypeintypescript【发布时间】:2019-02-0711:45:49【问题描述】:如何在不提供具体函数的情况下创建重载的函数类型?通过检查重载函数的类型,似乎可以在接口/对象类型上使... 查看详情

从类创建派生类型,但省略构造函数(打字稿)

】从类创建派生类型,但省略构造函数(打字稿)【英文标题】:Createaderivedtypefromclass,butomittheconstructor(typescript)【发布时间】:2020-02-2201:08:49【问题描述】:我有一个这样定义的接口和类:interfaceFooconstructor:typeofFoo;classFoostaticba... 查看详情

通用无状态组件 React 的类型?或在打字稿中扩展通用函数接口以具有进一步的通用性?

】通用无状态组件React的类型?或在打字稿中扩展通用函数接口以具有进一步的通用性?【英文标题】:TypeofGenericStatelessComponentReact?ORExtendinggenericfunctioninterfaceintypescripttohaveafurthergeneric?【发布时间】:2018-12-2919:04:20【问题描述】... 查看详情

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

】打字稿界面上的可选参数?【英文标题】:Optionalparametersontypescriptinterfaces?【发布时间】:2018-08-0505:30:26【问题描述】:作为explainedhere,?运算符可用于将函数参数标记为可选。?运算符对接口参数的含义是什么?例如,如果我... 查看详情

如何扩展递归打字稿接口?

】如何扩展递归打字稿接口?【英文标题】:Howtoextendarecursivetypescriptinterface?【发布时间】:2022-01-2006:25:26【问题描述】:我有一个递归接口,如下所示:interfaceTreeNodeid:stringchildren:TreeNode[]我想像这样扩展TreeNode:interfaceTreeNodeWit... 查看详情

打字稿从json创建一个类

】打字稿从json创建一个类【英文标题】:Typescriptcreateaclassfromjson【发布时间】:2016-03-0413:27:17【问题描述】:我有一个接口IPost和一个类Post,我想从json数据创建Post,在Post构造函数中我得到接口IPost匹配的json响应.我的意思是IPos... 查看详情

打字稿:无法声明接口

】打字稿:无法声明接口【英文标题】:typescript:cantdeclareaninterface【发布时间】:2021-02-0606:33:27【问题描述】:我正在使用typescript,但无法使用另一个文件中声明的接口。我的global.d.ts看起来像这样。declareinterfaceIPropSendEmailfrom:s... 查看详情

typescript打字稿接口继承(代码片段)

查看详情

来自数组类型的打字稿接口

】来自数组类型的打字稿接口【英文标题】:Typescriptinterfacefromarraytype【发布时间】:2018-01-1808:20:01【问题描述】:我需要强制一个数组具有一组特定的值,这些值应该是我界面的键。我可以用强制数组typeSomeProperties=[\'prop1\',\'pr... 查看详情

useState 与接口 - 反应本机打字稿

】useState与接口-反应本机打字稿【英文标题】:useStatewithinterface-reactnativetypescript【发布时间】:2020-11-1820:43:58【问题描述】:有没有一种方法可以将useState与接口类型一起使用?这就是我正在尝试做的事情:const[movie,setMovie]=useSt... 查看详情

打字稿接口变量空检查并设置默认值

】打字稿接口变量空检查并设置默认值【英文标题】:typescriptinterfacevariablenullcheckandsetdefaultvalue【发布时间】:2021-02-1721:56:18【问题描述】:如何在接口变量上检查null以及如何在typescript中设置默认值?constuserModel=snap.data()asUserMo... 查看详情

再次:打字稿函数重载

】再次:打字稿函数重载【英文标题】:Onceagain:typescriptfunctionoverload【发布时间】:2019-07-0411:17:56【问题描述】:通常我可以掌握打字稿语言的大部分功能,但有时函数重载仍然相当具有挑战性。我无法理解为什么typescript编译... 查看详情

打字稿是不是允许接口和字符串联合类型?

】打字稿是不是允许接口和字符串联合类型?【英文标题】:Doestypescriptallowinterfaceandstringuniontypes?打字稿是否允许接口和字符串联合类型?【发布时间】:2018-12-0700:41:22【问题描述】:我正在尝试实现一个类似的方法,该方法采... 查看详情

打字稿 - 强制值成为接口的属性

】打字稿-强制值成为接口的属性【英文标题】:Typescript-forcevaluetobeaproprertyofaninterface【发布时间】:2021-12-0313:53:10【问题描述】:我正在尝试创建某种工厂来为discord.js发出的某些事件类型创建类。在此示例中,ClientEvents由discord... 查看详情

打字稿与实现接口一起扩展类

】打字稿与实现接口一起扩展类【英文标题】:typescriptextendsclassalongwithimplementinterface【发布时间】:2020-12-2522:13:36【问题描述】:我正在尝试扩展第三方库类mongooseJs,以便我可以在其中拥有一些自定义功能。我过去用Javascript做... 查看详情