【问题标题】:Arrow function in typescript interface with return type as voidtypescript 接口中的箭头函数,返回类型为 void
【发布时间】:2018-01-25 01:21:02
【问题描述】:

我正在尝试在我的类型脚本界面中编写箭头函数,如下所示,但出现错误 “Class 'ToastrService' 错误地实现了接口 'IToastr'。”

interface IToastr{
    (message:string,title:string):void;
}

@Injectable()
export class ToastrService implements IToastr {
    (message:string,title:string):void {
         toastr.success(message,title);
    }
}

我的问题是:我们可以在 TS 接口中定义一个返回类型为 void 的函数签名吗??

我也尝试过搜索谷歌,但没有找到任何示例。谢谢!!

【问题讨论】:

  • 为什么不把它定义为常规方法呢?
  • 我之前定义为常规方法,它也可以工作。但只是想到用箭头函数替换常规函数,我很惊讶这不是常规的做法。我的问题是,为什么我们不能这样做??如果我们不能。
  • 我不是 TypeScript 专家,但我什至不确定你想在这里实现什么。接口是干什么用的?你打算如何注入这个服务并调用这个函数?我不确定是否可以同时成为一个类和一个函数。

标签: angular typescript arrow-functions


【解决方案1】:

是的,这是可能的。更多信息请查阅官方打字稿。

示例 1:

interface SearchFunc {
    (source: string, subString: string): void;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    // do smth
}

示例 2:解决方案:您应该为函数命名

interface IToastr{
    FuncName(message:string,title:string):void;
}

class ToastrService implements IToastr {
    FuncName(message:string,title:string):void {
         // toastr.success(message,title);
    }
}

【讨论】:

  • 在做了一些研究之后,我认为,在界面中有一个命名函数是有意义的。由于箭头函数是匿名函数,因此任何实现该函数的类/服务对于类/服务使用者来说都是无用的,因为它没有名称。虽然感谢您的回复。
【解决方案2】:

您所做的似乎很好,只是缺少函数的名称(或者如果这是一个构造函数,则缺少 constructor 关键字)

interface IToastr{
    toast(message:string,title:string):void;
}

@Injectable()
export class ToastrService implements IToastr {
    toast(message:string,title:string):void {
         toastr.success(message,title);
    }
}

【讨论】:

  • 在做了一些研究之后,我认为,在界面中有一个命名函数是有意义的。由于箭头函数是匿名函数,因此任何实现该函数的类/服务对于类/服务使用者来说都是无用的,因为它没有名称。虽然感谢您的回复。
猜你喜欢
  • 2017-03-09
  • 2019-01-15
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多