首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你能解释一下TypeScript中这个奇怪的ES6箭头功能吗?

你能解释一下TypeScript中这个奇怪的ES6箭头功能吗?
EN

Stack Overflow用户
提问于 2016-01-22 02:42:45
回答 3查看 882关注 0票数 8

使用TypeScript:

代码语言:javascript
复制
public subscribe:(subscribeFunction:(state)=>void)=>()=>void;

这是一个订阅方法,它将函数作为参数获取,类型为function,且给定函数在被调用时将接收状态参数,带参数的函数不会返回任何内容(即: void) ...我迷失在最后一个()=>()=>void上。

我的理解对吗?

EN

回答 3

Stack Overflow用户

发布于 2016-01-22 02:46:01

它用于具有(subscribeFunction: (state) => void) => () => void;类型的名为subscribe的公共属性

代码语言:javascript
复制
// scope
public
// name
subscribe:
// type (function)
    // parameters
    (
        // parameter name
        subscribeFunction:
        // parameter type (function)
        (state) => void
    ) => 
    // return type (function)
    () => void;

下面是一个编译的例子:

代码语言:javascript
复制
class MyClass {
    public subscribe: (subscribeFunction: (state) => void) => () => void;
}

let myInstance = new MyClass();

myInstance.subscribe = (subscribeFunction: (state) => void) => {
    console.log("statements might go here");

    return () => {
        subscribeFunction(1 /* state */);
        console.log("nothing returned by this inner function");
    };
};

// Example use

// outputs "statements might go here"
let innerFunction = myInstance.subscribe((state) => console.log(state));
// outputs 1 and "nothing returned by this inner function"
innerFunction();
票数 8
EN

Stack Overflow用户

发布于 2016-01-22 03:03:25

注意第一个冒号-- subscribe是函数类型的公共属性,而不是方法。展开:

代码语言:javascript
复制
public subscribe: // public property, which is
    ( // of the type of a function, which takes
        subscribeFunction: // 1 parameter, which itself is
        (state) => void // a function of 1 parameter, returning nothing
    ) => // and the upon invocation of a function stored in "subscribe" it
        () => void; // returns a function of no parameter and no return value

因此,您可以将一个函数存储到subscribe属性中,然后在为其提供一个函数作为参数的同时调用它,结果您将获得另一个函数,您可以随后调用该函数:

代码语言:javascript
复制
subscribe = (subscribeFunction: (state) => void) => {
    subscribeFunction('A');
    return () => {console.log('C');};
};
let subscribed = subscribe((state) => {
    console.log(state, 'B');
}); // prints 'A,B'
subscribed(); // prints 'C'
票数 0
EN

Stack Overflow用户

发布于 2016-01-27 02:57:18

tx用于反馈,现在我理解了它,我认为最好的解释是:

公共订阅:(subscribeFunction:(state)=>void)

//第一部分用于subscribeFunction,它将接受不返回任何内容的函数

=>()=>void;

//第二部分用于订阅本身,因为它将返回一个不返回任何内容的函数...我同意,像这样的代码应该更明确

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34931793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档