jpi*_*son 5 typescript definitelytyped es6-promise
我在一个Node应用程序中使用这个ES6 Promise最终实现名为promise.prototype.finally,我希望将其转换为TypeScript,但是我可以在DefinitelyTyped上找到此类包的可用类型.在这些情况下,我只为我需要的功能子集编写了自己的即兴类型定义,但在这种情况下,它是一个修改Promise对象原型的库,我没有遇到任何传统方式来表示这个在TypeScript中.有任何想法吗?
可能相关:
Tom*_*cer 15
虽然Slava的答案是正确的,但它只涉及finally块的输入.要将填充程序实际合并到代码中,以便可以编写p.finally(() => { ... }),则需要调用填充程序.
不幸的是,DefinitelyTyped上的打字目前不支持该shim功能,所以在支持之前,我建议你自己添加这些打字.
declare interface Promise<T> {
finally<U>(onFinally?: () => U | Promise<U>): Promise<U>;
}
declare module 'promise.prototype.finally' {
export function shim(): void;
}
Run Code Online (Sandbox Code Playgroud)
这些类型现在可用.安装时
npm install --save-dev @types/promise.prototype.finally
Run Code Online (Sandbox Code Playgroud)
在TypeScript代码中,在应用程序引导期间,您可以调用
import { shim } from 'promise.prototype.finally';
shim();
Run Code Online (Sandbox Code Playgroud)
这会将finally块添加到Promise原型中,允许您finally根据需要使用.
mas*_*asi 10
对于任何想知道如何在没有任何垫片的情况下本地工作的人:从TS 2.7开始,它是可能的.
请注意,TS 2.7尚未完全(2018年2月26日)与ES2018兼容.虽然还有一些东西缺失,但Promise.finally已经进入2.7版本.此外,tsconfig-schema应该已经接受ES2018作为目标,但TS 2.7不了解ES2018.现在使用新的功能,如Promise.finally,这已经是2.7,你必须使用"target": "ESNEXT"你的tsconfig.json.
然后你就可以编写这样的代码了:
myAsyncFunction().then
(
(var) => console.log("executing then. " + var)
)
.catch
(
(var) => console.log("executing catch. " + var)
)
.finally
(
() => console.log("executing finally.")
)
Run Code Online (Sandbox Code Playgroud)
请注意,由于它的性质,最终不会采取任何参数.
重要提示:虽然TS会正确转换并了解您正在做什么,但仍需检查您的JS-Engine是否支持Promise.finally.在我的情况下,我使用NodeJs 8.x,当然生产的JS不可执行,因为Promise.Finally从最新的NodeJs 10.x开始支持每晚构建 Node 10.x(稳定),请参阅此链接.
您可以编写自己的 d.ts 文件并在 tsconfig.json 文件中引用它。如果你这样做了,你就可以为像你这样的其他人的DefinitelyTyped git 做出贡献
更新:
如果我正确理解你的意思,你可以Promise在你自己的 d.ts 文件中扩展现有的类。使该方法成为可选的,这样它就不会告诉您实际的Promise类没有正确实现接口。您需要将其扩展为接口。
您的 d.ts 文件应如下所示
declare module 'es6-promise/dist/es6-promise' {
export interface Promise <R> {
finally?<U>(onFinally?: () => U | Promise<U>): Promise<U>;
}
}
Run Code Online (Sandbox Code Playgroud)
而且它应该可以正常工作......
我为您创建了一个项目作为示例: promise-extension-typescript-example
我创建了一个到 DefinelyTyped git 存储库的拉取请求,希望它能被接受,你可以从那里下载它......