Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在typescript中键入承诺的回调?_Javascript_Node.js_Typescript - Fatal编程技术网

Javascript 如何在typescript中键入承诺的回调?

Javascript 如何在typescript中键入承诺的回调?,javascript,node.js,typescript,Javascript,Node.js,Typescript,我可以为键入回调。然后在我的承诺中,目前我暂时使用任何我想使用的字符串或类似的位 知道如何键入我的函数md5吗 export const md5 = (path: string) => new Promise((resolve, reject) => { const hash = createHash("sha1"); const rs = createReadStream(path); rs.on("error", reject); rs.on(

我可以为键入回调。然后在我的承诺中,目前我暂时使用
任何我想使用的
字符串
或类似的

知道如何键入我的函数md5吗

export const md5 = (path: string) =>
  new Promise((resolve, reject) => {
    const hash = createHash("sha1");
    const rs = createReadStream(path);
    rs.on("error", reject);
    rs.on("data", chunk => hash.update(chunk));
    rs.on("end", () => resolve(hash.digest("hex")));
  });


  it("should hash md5 a file", () => {
    // error here on hash:string, if I use instead any it works
    const m = md5(fileName).then((hash: string) => {
      assert.strictEqual(m, "4738e449ab0ae7c25505aab6e88750da");
    });
我收到的错误信息:

Argument of type '(hash: string) => void' is not assignable to parameter of type '(value: {}) => void | PromiseLike<void>'.
  Types of parameters 'hash' and 'value' are incompatible.
    Type '{}' is not assignable to type 'string'.
  });
类型为“(hash:string)=>void”的参数不能分配给类型为“(value:{})=>void | PromiseLike”的参数。 参数“哈希”和“值”的类型不兼容。 类型“{}”不可分配给类型“string”。 });
考虑直接指定退货承诺类型
新承诺


要么为Promise提供泛型类型参数,要么为
md5
方法提供返回类型,要么两者都提供:

export const md5 = (path: string): Promise<string> =>
  new Promise<string>((resolve, reject) => {
    const hash = createHash("sha1");
    const rs = createReadStream(path);
    rs.on("error", reject);
    rs.on("data", chunk => hash.update(chunk));
    rs.on("end", () => resolve(hash.digest("hex")));
  });
export const md5=(路径:string):Promise=>
新承诺((解决、拒绝)=>{
const hash=createHash(“sha1”);
const rs=createReadStream(路径);
rs.on(“错误”,拒绝);
rs.on(“数据”,chunk=>hash.update(chunk));
rs.on(“end”,()=>resolve(hash.digest(“hex”));
});

您所缺少的只是“返回”。更改为:

export const md5 = (path: string) =>
    return new Promise((resolve, reject) => {
        const hash = createHash("sha1");
        const rs = createReadStream(path);
        rs.on("error", reject);
        rs.on("data", chunk => hash.update(chunk));
        rs.on("end", () => resolve(hash.digest("hex")));
    });

尝试使用
新承诺(…
。这是一个匿名箭头函数。它不需要返回语句,除非函数体包装在{}中,否则无效。此代码将导致
'{'预期的
错误
export const md5 = (path: string): Promise<string> =>
  new Promise<string>((resolve, reject) => {
    const hash = createHash("sha1");
    const rs = createReadStream(path);
    rs.on("error", reject);
    rs.on("data", chunk => hash.update(chunk));
    rs.on("end", () => resolve(hash.digest("hex")));
  });
export const md5 = (path: string) =>
    return new Promise((resolve, reject) => {
        const hash = createHash("sha1");
        const rs = createReadStream(path);
        rs.on("error", reject);
        rs.on("data", chunk => hash.update(chunk));
        rs.on("end", () => resolve(hash.digest("hex")));
    });