提问者:小点点

在接口类型脚本中定义回调


我想实现一个接口,它包含一系列函数和属性,很少函数需要在回调模式下工作。例如:

interface Writer{
     readData : (fileLocation: string) => void;
     generatData: (fileLocation: string) => void;
}

我想执行generateData函数并在作业完成后通知。例如:

const WriterInstance:Writer ={
   generateData("C:/workspace" , ()=>{
       console.log("work is done");
   });
   readData("C:/workspace/file1.text" , ()=>{
       console.log("work is done");
   })
}

我完全误解了接口中回调的语法和调用。如果有人举例说明,那就太好了。


共2个答案

匿名用户

在您的界面中,您希望用两个参数来表示一个函数,第一个是字符串,第二个是函数,所以您可以这样写它:

interface Writer{
     readData : (fileLocation: string, callback: ()=>void) => void;
     generateData: (fileLocation: string, callback: ()=>void) => void;
}

匿名用户

只要想象回调函数是一个正常的参数。然后,将writerinstance定义为普通对象-只需定义它的属性

interface Writer{
  readData : (fileLocation: string, callback: () => void) => void;
  generateData: (fileLocation: string, callback: (error: Error, data?: any) => void) => void;
}

const WriterInstance: Writer = {
  readData: (fileLocation: string, callback: () => void) => {
    // dome something with fileLocation
    callback();
  },

  generateData: (fileLocation: string, callback: (error: Error, data?: any) => void) => {
    // dome something with fileLocation
    callback(null, true);
  }
}

// usage of WriterInstance
WriterInstance.generateData('C:/workspace/file1.text', (error, data) => {
  if (error) {
    console.log('work is not done');
    return console.log(error);
  }
  console.log('work is done');
});