如何在打字稿中调用回调?

时间:2018-04-02 13:01:11

标签: typescript typescript2.0

我已声明功能:

 _translate(value: T, callback: (name: T) => T): void;

功能是:

public _translate(value: T, callback: T) {
    if (!this.translate) {
      callback(value);
    }
}

如何打电话(使用)它?我尝试了这个问题:

this._translate(value, function(data: T) {
   console.log(data);
});

不起作用

2 个答案:

答案 0 :(得分:2)

你没有在回调函数中返回任何内容,并且你没有尝试使用来自调用者的回调函数的结果......所以,它看起来就像你应该改变声明_translate

_translate(value: T, callback: (name: T) => void): void;

这意味着callback参数应该是一个函数,它接受类型为T的输入并且不返回任何内容(void)。然后,您需要更改实现签名以匹配:

public _translate(value: T, callback: (name: T) => void): void {
    if (!this.translate) {
      callback(value);
    }
}

然后您应该可以在类的实例上调用_translate()作为方法,例如:

// class with _translate() method is MapperServiceArray<T>
const thingy = new MapperServiceArray<string>(); 

// call _translate on the object with a string and a callback that 
// takes a string and does not return a value
thingy._translate("something", x => console.log(x.charAt(0)));

现在我看到了你的code snippet,我可以suggest changes进行编译(有点),但我真的不知道你要做什么。希望有所帮助。祝你好运。

答案 1 :(得分:1)

试试这个:

// parameters: 
//   value, instance of T.
//   callback: function, accepting parameter (name) that is instance of T and returns object that is instance of T.
// returns: Void.
public _translate(value: T, callback: (name:T) => T): void {

}

然后调用它:

this._translate(value, (data: T): T => {
    return {};
});