【问题标题】:How can I define a Typescript interface for a function?如何为函数定义 Typescript 接口?
【发布时间】:2014-09-26 10:10:34
【问题描述】:

我正在定义以下 Typescript 接口。 clickCustomButton1 应该什么都不返回,但我不确定如何指定。

interface IButtonTemplate {
    clickCustomButton1: (); // How can I say this should return nothing?
    // more code here
}

我在我的代码中这样使用它:

clickCustomButton1: null

然后:

newTopicTests = () => {
}

clickCustomButton1 = this.newTopicTests();

这给了我一个错误提示:

Error   2   Cannot convert 'void' to '() => boolean'

有人可以告诉我我做错了什么吗?我认为我需要做的是指定 clickCustomButton1 和 newTopicTests 不返回任何内容。但是如何使用 Typescript 做到这一点?

【问题讨论】:

  • user2864740 - 很抱歉,但我不确定我理解您的意思。我在我的问题中添加了一行,询问是否有人可以告诉我如何做到这一点,并在我分配给 clickCustomButton1 的任何内容都符合它不返回任何内容的条件时使其工作。

标签: javascript typescript


【解决方案1】:

问题是因为 lambda () => {} 被键入为 (): void,因为它不返回任何内容,因此没有推断出 [other] 类型。

因此,给定f = () => {},表达式f() 也被键入为void - 但clickCustomButton1 必须返回一个boolean,因为它是声明的。

使用以下 lambda 时进行比较,其类型为 (): boolean,现在是类型有效的:

newTopicTests = () => true

查看这个问题的另一种方法是将原始代码写成:

newTopicTests = (): boolean => {}

(这也将无法编译,但会在更接近源的位置显示错误。)


问题更新后..

要在接口中声明 方法 不返回任何内容,请使用:

clickCustomButton1(): void;

要声明一个类型为(): void成员,请使用

clickCustomButton1: () => void;

另请注意,null ,而 void 代表什么。

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 2019-10-11
    • 2017-07-02
    • 1970-01-01
    • 2020-05-01
    • 2023-02-22
    • 2015-07-27
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多