Definitelytyped: рдмреНрд▓реВрдмрд░реНрдб 3.0: рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЕрдЧре░ 2016  ┬╖  44рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: DefinitelyTyped/DefinitelyTyped

рд╕реБрдирд┐рдпреЗ рд╕рдм рд▓реЛрдЧ!

рдореИрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрдкреАрдл рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ @lhecker рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛: рд╡реИрд╢реНрд╡рд┐рдХ Promsie рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдм рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ bluebird-global.d.ts рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

@types/bluebird-global рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИред рдпреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдмреЛрдирдЯ рдХреЗ рдиреАрдЪреЗ @types/bluebird@^3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдкрд░ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ (рдпрд╛рдиреА ts рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрдврд╝реЗрдВред

рд╕рднреА 44 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЦреИрд░ рдЖрдИрдПрдордПрдЪрдУ рдкрд┐рдЫрд▓реА рдмреНрд▓реВрдмрд░реНрдб рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдереАрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рднрд╛рд░реА рд░реВрдк рд╕реЗ рд▓реАрдХ рд╣реЛ рдЧрдП рдереЗ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдЫрд▓реА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╡рд╣ declare var Promise: PromiseConstructor; рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╣реИ рдЬрдмрдХрд┐ PromiseConstructor рдкрд┐рдЫрд▓реЗ (рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдмреНрд▓реВрдмрд░реНрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛ред

рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп *.d.ts рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

import Bluebird = require("bluebird");
declare var Promise: Bluebird<any>;

рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢ рдирд╣реАрдВред рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ:

declare function doLoadData(): Promise<Data>

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди Promise<T> рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирдХ Promsie рд╣реИ, рдмреНрд▓реВрдмрд░реНрдб рдПрдХ рдирд╣реАрдВред var Promise: Bluebird<any> рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдореИрдВ рдорд╛рдирдХ рд╡рд╛рджрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ 2.0 рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред

@Strate рдЖрд╣ рд▓рд╛рдирдд рд╣реИ рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рдВрдмреА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреА рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдФрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЬрдорд╛ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рдпрд╣ рдЦреЛ рдЧрдпрд╛ ...

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рд░реЗрдкреЛ рдмрдирд╛рдпрд╛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ: https://github.com/d-ph/typescript-bluebird-as-global-promise

рдЧрд┐рдЯ рдХреНрд▓реЛрди && npm install && npm run tsc

рд╕рдорд╕реНрдпрд╛:
рддреГрддреАрдп рдкрдХреНрд╖ d.ts рдлрд╝рд╛рдЗрд▓реЗрдВ Promise рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЯрд╛рдЗрдк рдХреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ Promise рдпрд╛ рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ lib.es6.d.ts (рдЬрдм "target": "es6" ) рдпрд╛ рдЕрдиреНрдп рдХрд╛рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП core-js (рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде es5 рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп) . рдирд╡реАрдирддрдо bluebird.d.ts рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рднрд▓реЗ рд╣реА bluebird.js рдЦреБрдж рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо:
рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб (рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓) рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд╛рджреЛрдВ рдкрд░ рджреЗрд╡ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:
рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб (рд╕рдВрдХрд▓рди рд╕рдлрд▓) рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рд╡рд╛рджреЛрдВ рдкрд░ рджреЗрд╡ рдмреНрд▓реВрдмрд░реНрдб рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреМрди рд╣реИред @lhecker , рдЖрдк git blame рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рдХреНрдпрд╛ рд╣реИ, рдХрд┐ рдЬреАрдердм рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ?

рд╡рд░реНрддрдорд╛рди рдкреИрджрд▓ рдорд╛рд░реНрдЧ:

  1. рд╕рдмрд╕реЗ рдЧрдВрджрд╛ред рдХрднреА рднреА рдмреНрд▓реВрдмрд░реНрдб рдЖрдпрд╛рдд рди рдХрд░реЗрдВ рдФрд░ рдХрднреА рднреА рдмреНрд▓реВрдмрд░реНрдб рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдмреНрд▓реВрдмрд░реНрдб Promise рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: Promise["config"]({}); Promise.resolve("foo")["finally"](() => { console.log("lol"); }) рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЪреБрдк рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛рдиреА рдРрд░реЗ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: [""]
  2. рдЧрдВрджрд╛ рдФрд░ рдХрд╖реНрдЯрдкреНрд░рджред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
import * as Bluebird from 'bluebird';
declare global { export interface Promise<T> extends Bluebird<T> {} }

рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, Bluebird.config({}) рдХреЗ рдмрдЬрд╛рдп Promise.config({}) #$4$#$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдбреАрдИ рдЗрд╕ рд╣реИрдХ рдХреА рд╕рд╣реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдореНрдо... рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛ рдХрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдПрдХ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореИрдВ рдФрд░ рдХрдИ рдЕрдиреНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВрдиреЗ рдЦреБрдж рдЯрд╛рдЗрдкрд┐рдВрдЧ рднреА рдирд╣реАрдВ рд▓рд┐рдЦреА рдереА! рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕реЗ рдХреЗрд╡рд▓ 3.0 рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 3.0 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд╣реИ рдирд╛?

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рджрд┐рд╢рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ modules > globals рд╣реИ рдЬреЛ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрднреА рднреА рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Bluebird рд╣рд░ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдпрд╛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП:

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА Promise.noConflict() рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреА "рдЯрд╛рдЗрдк рд╕реЗрдлреНрдЯреА" рдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдкреНрд░рдХрд╛рд░ рдХреЛ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджреЗрдЧрд╛, рднрд▓реЗ рд╣реА tsc рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рддреЛ рд╣рд╛рдБ ... @ рдбреА-рдкреАрдПрдЪред рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рд╡реЙрдХрдЕрд░рд╛рдЙрдВрдб рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╣рд░ рд╕рдордп рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ _can_ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╡реИрд╢реНрд╡рд┐рдХ Promise рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдЙрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛рди рдЯрд╛рдЗрдкрд┐рдВрдЧ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 2.0 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛ред

рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реБрдП _very_ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ( noConflict() рд╕рдорд╕реНрдпрд╛ рдЖрджрд┐ рдпрд╛рдж рд░рдЦреЗрдВ) рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдХреЗрд╡рд▓ рдСрдкреНрдЯ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВред

рдЖрдИрдПрдордУ рдЖрдЧреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА bluebird-global.d.ts (рдпрд╛ рд╕рдорд╛рди) рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ bluebird.d.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд _рдФрд░_ рд╕рд╣реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рднреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд░рдЦрддреЗ рд╣реБрдПред

рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЦрд╛рд▓реА рд╕рдордп рдмрдЪрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХреЗрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдпреЛрдЧрджрд╛рди рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рдореИрдВ

рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕рдордп рдХреА рдХрдореА рдФрд░ рдЗрд╕ рд╕рдордп рдРрд╕реА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред

@lhecker рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╡рд╛рджреЗ рдХрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╣реИрдХ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЛ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд╕рд╛рде Promise рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЛрдЪреЗрдЧрд╛ рдХрд┐ fetch рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ:

import `whatwg-fetch`;
let result = fetch("anyurl"); // this is NOT bluebird promise, but typescript think that it is.

fetch рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ Promise.resolve рдореЗрдВ рд▓рдкреЗрдЯреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, result рдкрд░ result .finally рд╡рд┐рдзрд┐:

import `whatwg-fetch`;
fetch("anyurl").then().finally() // goes to runtime error with overriden global promise, but should be compile error.

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ bluebird рдЖрдпрд╛рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ:

import Promise from "bluebird";
import `whatwg-fetch`;
Promise.resolve(fetch("anyurl")).then().catch() // no compile error, no runtime error

рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @lhecker ред

рдЖрдкрдХреА рдХрд╣реА рд╣рд░ рдПрдХ рдмрд╛рдд рд╕реЗ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдФрд░ рдореБрдЭреЗ Promise.resolve() рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ @Strate рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, es6 рд╡рд╛рджреЗ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб (рдпрд╛ рдмреНрд▓реВрдмрд░реНрдб рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╡рд╛рджреЗ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдбреЙрди рдЕрдкрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рдВрджреБ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИ)ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЛ рдлрд╛рдпрджрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдХреЛрдИ (рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд: рдиреЛрдбрдЬ/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ) рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ:

  1. npm install <absolutely everything that uses es6 promise>
  2. npm install bluebird @types/bluebird
  3. рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдореБрдЭреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ "рдПрд╕ 6 рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдЕрдиреБрднрд╛рдЧ рд╣реЛрдиреЗ рд╕реЗ рднреА рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдпрд╛рдиреА

import * as Bluebird from 'bluebird';
declare global { export interface Promise<T> extends Bluebird<T> {} }

рддрдерд╛

import * as Promise from 'bluebird';
import { Observable } from "rxjs";

let observable = Promise.resolve(new Observable<number>().toPromise());

рдПрдХ рд░реАрдбрдореА рдореЗрдВ рдпрд╛ рдмреНрд▓реВрдмрд░реНрдб.рдбреА.рдЯреАрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмреНрд▓реЙрдХ рдореЗрдВред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдореИрдВрдиреЗ Promise рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рд▓реЗ рдкрд░ рдЬрд╛рдирд╛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓реА рд╣реИрдВ, рдЬрд╣рд╛рдВ рддреГрддреАрдп рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ES6 рдкреНрд░реЙрдорд┐рд╕ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдХрджрдо рд╕реЗ рдореЗрд░рд╛ рдХреЛрдбрдмреЗрд╕ рднреА рд╕рд╛рдл рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рд╕рднреА рдХреЛ Promise рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рд╣рдЯрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдЪреАрдпрд░реНрд╕ :)

рдореИрдВ modules > globals рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рддрд░реНрдХ (рдФрд░/рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛) рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВ рдПрдХ рдмрдбрд╝реЗ-рдИрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрд╕рдкреАрдП рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдкреНрд░реЙрдорд┐рд╕ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВ @d-ph рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде @lhecker рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП bluebird-global.d.ts рдлрд┐рдХреНрд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

import * as Bluebird from 'bluebird';
declare global { export interface Promise<T> extends Bluebird<T> {} }

рдореИрдВрдиреЗ рдЗрд╕реЗ typings рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореЗрд░рд╛ typings/modules/bluebird-global/index.d.ts рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рд╣реИ:

// Generated by typings
// Source: src/bluebird-global.d.ts
declare module 'bluebird-global' {
// via https://github.com/DefinitelyTyped/DefinitelyTyped/issues/10801
import * as Bluebird from 'bluebird';
global { export interface Promise<T> extends Bluebird<T> {} }
}

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рд╕рдм рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ (v1.8.2) рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ:

ERROR in /path/to/typings/modules/bluebird-global/index.d.ts
(6,27): error TS2665: Module augmentation cannot introduce new names in the top level scope.

ERROR in /path/to/src/bluebird-global.d.ts
(2,35): error TS2665: Module augmentation cannot introduce new names in the top level scope.

рдореИрдВрдиреЗ global-modifying-module.ts . рдХреЗ рд▓рд┐рдП MS рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА
https://www.typescriptlang.org/docs/handbook/declaration-files/templates/global-modifying-module-d-ts.html

рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ TS рд╕рдорд╕реНрдпрд╛
https://github.com/Microsoft/TypeScript/issues/6722

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдиреБрдХрд╕рд╛рди рд╣реБрдЖ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдирдорд╕реНрддреЗред

рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рд░реЗрдкреЛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ? рдХрдбрд╝реА ред рдореИрдВ рдЗрд╕рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рдерд╛, рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рднреА рд╡рд╛рджреЛрдВ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдкреНрд░реЙрдорд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдЕрдм рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реАрдбрдореА рдореЗрдВ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж

// declare global {
//     export interface Promise<T> extends Bluebird<T> {}
// }

рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ?

рдзреНрдпрд╛рди рд░рдЦреЗрдВ, рдХрд┐ рдореЗрд░рд╛ рд░реЗрдкреЛ TS 2 (рдЬреЛ рдЕрдм рд╕реНрдерд┐рд░ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк 1.8.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╕ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЖрдк TS рдХреЛ 2 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдЕрдкрдиреА рд╡реИрд╢реНрд╡рд┐рдХ d.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдбрд╛рд▓рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡реЗрдмрдкреИрдХ рд╕рдВрдХрд▓рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ (рдЬреЛ рдЕрдм рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред рдореИрдВ рдЖрдкрдХреЗ рдЬреЗрдПрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рд╣рд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдирд╛ рдлрд┐рдХреНрд╕ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ) рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

рдореИрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ Promise рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХреЗ рд░реВрдк рдореЗрдВ "рдкрдВрдЬреАрдХреГрдд" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдпрд╣ рдкреВрд░рд╛ рд╕реВрддреНрд░ рдкрдврд╝рд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ред рднрд╛рдЧ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрднреА рднреА рдореВрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдмреНрд▓реВрдмрд░реНрдб) Promise рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ Promise рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ ( new Promise(...) ) рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

<script src="//.../bluebird.min.js"></script>
<script>
    var promise = fetch("some url");

   promise.finally(...); 
</script>

рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореВрд▓ Promise рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ?

рдЕрдВрдд рдореЗрдВ, рдЕрдЧрд░ рдореИрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдпрд╣ рдкреВрд░реНрдг рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░, рд╕рднреА рд╡рд╛рджреЛрдВ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╕рд╛рде рднреА рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

рдпрджрд┐ рдЖрдк рдмреНрд▓реВрдмрд░реНрдб (рдЬреЛ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ) рдХреЗ рджреВрд░рд╕реНрде рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдЕрдм рдмреНрд▓реВрдмрд░реНрдб рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдареАрдХ рд▓рдЧрд╛ред рд▓реЛрдЧ рдЕрдиреНрдпрдерд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдиреЛрдб.рдЬреЗрдПрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдкреВрд░рд╛ рд╕реВрддреНрд░ ts рдХреЛ рдЙрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рд╡рд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдмреНрд▓реВрдмрд░реНрдб рд╣реИ)ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП declare global {} рдЪреАрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рддреЛ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реЛ рдЧрдпрд╛ред

@ d-ph рд▓реЗрдХрд┐рди рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░ *.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд░рдирд╛ рд╣реИ рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ - рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ? рд╢рд╛рдпрдж рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдВрддрд┐рдо "рд╕рдорд╛рдзрд╛рди" рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред :)

рд╣рд╛рдБ, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдХреЛрдИ рд╕рд░рд▓ just copy&paste this line to your X file and everyone and their dog are happy now рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред

рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рдпрд╛ рддреЛ рдЖрдкрдХреА рдЬрд╛рдБрдЪ рдХреА рдереА:

  1. рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ *.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ import * as Bluebird from 'bluebird'; declare global { export interface Promise<T> extends Bluebird<T> {} } рд▓рд╛рдЗрди рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдпрд╛
  2. рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрдВрдХреНрд╢рди рдореЗрдВ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдХреЛрдб рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рд╣рд░ рд╡рд╛рджреЗ рдХреЛ рд░реИрдк рдХрд░реЗрдВред рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдпрд╣ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░рдирдЯрд╛рдЗрдо рдУрд╡рд░рд╣реЗрдб рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдФрд░ рд╕рдВрдХрд▓рди-рд╕рдордп рдореЗрдВ рдпрд╣ рдЯреАрдПрд╕ рдХреЛ рдЦреБрд╢ рдХрд░ рджреЗрдЧрд╛ред

рдлрд┐рд░ рд╕реЗ, рд╕рдорд╛рдзрд╛рди 1. рдЙрд╕ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВред рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╡реЗрдмрдкреИрдХ + рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░)ред

рдпрджрд┐ рдЖрдк рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдЪрдореБрдЪ рджреЗрд╡реЛрдВ рдХреЛ 1 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ 1 рдкрдВрдХреНрддрд┐ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ; рдкреА

рдзрдиреНрдпрд╡рд╛рдж @ d-ph -- рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ *.ts рдлрд╝рд╛рдЗрд▓" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ?

рд╣рд╛рдВред "рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ" .ts рдлрд╝рд╛рдЗрд▓ .ts рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ html рдореЗрдВ <script> рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рдВрдХрд▓рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдЕрднреА рдПрдХ рддреНрд╡рд░рд┐рдд рдЧреБрдЧрд▓реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ (рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВ)ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ, рдХрд┐ рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ global { export interface Promise<T> extends Bluebird<T> {} } рдХреЛ bluebird.d.ts рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЬреАрдердм рд░реЗрдкреЛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, bluebird.d.ts рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрджрд▓реЗрдВ:

// Generated by typings
// Source: bluebird.d.ts
declare module 'bluebird' {
// Type definitions for Bluebird v3.x.x
// Project: http://bluebirdjs.com

class Bluebird<R> implements Bluebird.Thenable<R>, Bluebird.Inspection<R> {

рдЗрд╕рдХреЗ рд▓рд┐рдпреЗ:

// Generated by typings
// Source: bluebird.d.ts
declare module 'bluebird' {
// Type definitions for Bluebird v3.x.x
// Project: http://bluebirdjs.com

global { export interface Promise<T> extends Bluebird<T> {} }

class Bluebird<R> implements Bluebird.Thenable<R>, Bluebird.Inspection<R> {

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк @types/bluebird рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрднреА рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд╣реИрдХ рдХрд┐рдП рдЧрдП bluebird.d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ), рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ...

рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ _stubs.d.ts рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдФрд░ рдореИрдВ рдмрд╣реБрдд рдХрд░реАрдм рд╣реВрдВред finally рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдФрд░ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реИ рдЬреЛ Promise рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдореБрдЭреЗ рдЕрднреА рднреА delay Promise рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ bluebird.d.ts рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!

declare module "bluebird-global" {
    import * as Bluebird from "bluebird";

    global { export interface Promise<T> extends Bluebird<T> { } }
}

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: delay рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдЗрд╕рд▓рд┐рдП рдереА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Promise.delay(2000) ред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрдм рдореЗрд░рд╛ рдлрд╝рдВрдХреНрд╢рди Promise<T> рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

рддреНрд░реБрдЯрд┐ TS2322: 'рдмреНрд▓реВрдмрд░реНрдб' рдЯрд╛рдЗрдк рдХрд░реЗрдВ'рд╡рд╛рджрд╛' рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ'ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореИрдВрдиреЗ Promise рдХреЛ Bluebird рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЬрдм рднреА рдореИрдВ then рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Bluebird<T> рд╣реИ Promise<T> ред

рдпрд╣рд╛рдБ рдЗрд╕ рд╣реИрдХ рдХрд╛ рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдореБрдЭреЗ рдпрд╣ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛, рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ Bluebird рдХреЗ рдмрдЬрд╛рдп Bluebird Promise рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмреНрд▓реВрдмрд░реНрдб рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рд╕реАрдзреА рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рд╣реИред

_stubs.d.ts

declare module "bluebird-global" {
    import * as Bluebird from "bluebird";

    global {
        export interface Promise<T> extends Bluebird<T> {
            then<U1, U2>(onFulfill: (value: T) => U1 | Bluebird.Thenable<U1>, onReject: (error: any) => U2 | Bluebird.Thenable<U2>): Promise<U1 | U2>;
            then<U>(onFulfill: (value: T) => U | Bluebird.Thenable<U>, onReject: (error: any) => U | Bluebird.Thenable<U>): Promise<U>;
            then<U>(onFulfill: (value: T) => U | Bluebird.Thenable<U>): Promise<U>;
            then(): Promise<T>;

            finally<U>(handler: () => U | Bluebird.Thenable<U>): Promise<T>;
        }
    }
}

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ bluebird-global рдпрд╛ bluebird-override рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди $#$ Bluebird рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдЬрдЧрд╣ Promise рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рдмрд╕ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП: рдЬреИрд╕рд╛ рдХрд┐ @ProTip рдиреЗ рдХрд╣рд╛, bluebird-2.0.d.ts JustWorksTM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдмрд╕ рдЗрд╕реЗ npm install @types/[email protected] рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ tsconfig.json рдХреЗ compilerOptions.types рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

{
    "compilerOptions": {
//     (...)
        "types": [
          "bluebird"
        ]
    },
    "include": [
        "src/**/*.ts"
    ]
}

рдЙрд╕ .d.ts рдФрд░ рд╡рд░реНрддрдорд╛рди рдмреНрд▓реВрдмрд░реНрдб рд╕рдВрд╕реНрдХрд░рдг (рдпрд╛рдиреА 3.x) рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣реИрдХ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

JustWorksTM рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ: рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рдП) рдИрдПрд╕5 рд▓рдХреНрд╖реНрдп
рдмреА) ES6 рд▓рдХреНрд╖реНрдп
рд╕реА) рдХреЛрд░-рдЬреЗрдПрд╕ рд▓рд┐рдм рдХреЗ рд╕рд╛рде рдИрдПрд╕ 5 рд▓рдХреНрд╖реНрдп

рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдХреЛрдИ рдмрд┐рд▓реНрдб рд╕реЗрдЯрдЕрдк (рд╡реЗрдмрдкреИрдХ + рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, PhpStorm IDE рдмрд┐рд▓реНрдХреБрд▓ рднреА рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдЙрди рджреЛ рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдпрд╛/рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://github.com/Microsoft/TypeScript/issues/10178 рдФрд░ https://github.com/Microsoft/TypeScript /рдореБрджреНрджреЗ/12382 ред рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛ (рдФрд░ рдХреБрдЫ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ), рдХрд┐ рд╣рдореЗрдВ bluebird-global.d.ts рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

// bluebird-global.d.ts

import * as Bluebird from "bluebird";

export as namespace Promise;
export = Bluebird;

рдмрд╢рд░реНрддреЗ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рджреЛ рдЯрд┐рдХрдЯреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реЛред рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдмреНрд▓реВрдмрд░реНрдб-2.0.d.ts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

@ рдЬреЛрд╢ рдореИрдХрдХреБрд▓реНрдлрд╝

рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╡рд╣ рддреГрддреАрдп рдкрдХреНрд╖ рдХреЛрдб рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░реЙрдорд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдирдпрд╛ рдкреНрд░реЙрдорд┐рд╕ (...)) рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмреНрд▓рд┐рдмрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдмрд╣реБрдд рдЖрд╕рд╛рдиред рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (Chrome рдкрд╕рдВрджреАрджрд╛):

var NativePromise = Promise;
window.Promise = function() {}; // try to overload NativePromise
NativePromise === Promise; // false. Seems it is overloaded!
// And now, let check with some native code, which return Promise, for example fetch
Object.getPrototypeOf(fetch("")) === Promise.prototype; // false, Whoops!
Object.getPrototypeOf(fetch("")) === NativePromise.prototype; // true! Double whoops!

рдирдорд╕реНрддреЗред рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдмрд░реНрдб рдкрд░ рдирд┐рд░реНрднрд░ рди рд░рд╣реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реВрдмрд░реНрдб рдЖрдпрд╛рдд рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣ рдХрд░реЗрдВ:

рд╡реИрд╢реНрд╡рд┐рдХ ['рд╡рд╛рджрд╛'] = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдмреНрд▓реВрдмрд░реНрдб')

рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рднреА рд╢рд╛рдорд┐рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

@types/bluebird-global рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИред рдпреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдмреЛрдирдЯ рдХреЗ рдиреАрдЪреЗ @types/bluebird@^3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдкрд░ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ (рдпрд╛рдиреА ts рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкрдврд╝реЗрдВред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж @ рдбреА-рдкреАрдПрдЪ!

@ d-ph @types/bluebird-global рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреНрдпрд╛ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рдХреЛ рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдпрд╛рдд рдФрд░ рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

npm install --save-dev @types/bluebird-global рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: рд▓рд┐рдВрдХ (рд▓рд┐рдВрдХ рдЕрдкрдбреЗрдЯ 2017-04-02)ред рдпрд╣ рдЕрдХреЗрд▓реЗ рд╣реА рдЪрд╛рд▓ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдЖрдпрд╛рдд/рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред

рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ: рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ package.json::devDependencies @types/bluebird рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИред

рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ: рд▓рд┐рдВрдХ

@MichaelTontchev @ d-ph рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рд╣рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ Promise.Inspection рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдп @ksnydeред

рдХреГрдкрдпрд╛ рдореБрдЭрд╕реЗ рдмрд╛рдд рдХрд░реЗрдВред рдореИрдВ рд░рдЦрд╡рд╛рд▓рд╛ рд╣реВрдБред

рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рдЖрдк рдЗрд╕ Promise.Inspection рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреГрдкрдпрд╛?

рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ bluebird-global рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛:

let promiseInspectionTest = new Promise<void>((resolve) => {});
promiseInspectionTest.value();

рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ Promise.Inspection рд╕реЗ bluebird-global рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЭрдЯрдХрд╛ рд╣реИ:

import * as Bluebird from "bluebird";

class Foo<T> implements Bluebird.Inspection<T> {

}

рдЪреВрдВрдХрд┐ рдЖрдк bluebird-global рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реНрдкрд╖реНрдЯ devDependencies рдХреЗ рдореВрд▓ bluebird рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдареЛрд╕ рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдорд╛рдирдХ рд╡рд╛рджрд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдХреНрд╖реНрдо рдХрд▓рд╛ рд╣реИ lib.d.ts ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ bluebird рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рджрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреБрд░реБ рдорд╛рдирдХ рдореЗрдВ Promise.Inspection рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ bluebird-global рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдЕрдЧрд░ рдореИрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реВрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА master , рдХреНрдпреЛрдВрдХрд┐ рдбреАрдЯреА рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рдЗрди рджрд┐рдиреЛрдВ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рд╣реИрдВред

рдЪреАрдпрд░реНрд╕ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рдордХрд╛рдЬ рд╣реИред рдпрд╛ рд╢рд╛рдпрдж "рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕" рдЧрд▓рдд рдирд╛рдордХрд░рдг рд╣реИред

рдореЗрд░реА рд╕рдордЭ/рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕реБрдкрд░рд╕реЗрдЯ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдмреНрд▓реВрдмрд░реНрдб рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдореИрдВ _would_ Bluebird.Inspection рдХреЛ Promise.Inspection рдкрд░ рдЙрдЬрд╛рдЧрд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡рд╛рджреЛрдВ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдкреАрдЖрдИ рд╕рддрд╣ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред

рдЬрдмрдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рд░рд╣реВрдВрдЧрд╛ред

рдЬрдмрдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ bluebird-global рдмрдирд╛рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рдерд╛ рдХрд┐ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рд╕реЗ рдмрдирд╛рдП рдЧрдП рдФрд░ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп _not рдХрд╖реНрдЯрдкреНрд░рдж_ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдкреНрд░рддреАрдХ рдкрд░ рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг class Promise<T> extends Bluebird<T> {} рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдерд╛), рдмрд▓реНрдХрд┐ рдПрдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдкреНрд░рддреАрдХ рд╣реИред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдХреБрдЫ рднреА рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреНрдЮрд╛рдд рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬреЛ рд╕рдЪрдореБрдЪ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмрд╛рд▓реЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рд┐рд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЦреАрдВрдЪрддрд╛ рд╣реИред

рдЗрд╕реЗ "рдирд╣реАрдВ" рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЕрдЧрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд▓реЛрдЧ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ - рдпрд╣ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдХреЛрдИ рднреА рд╢рд╛рдпрдж рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реИ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд▓рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред

рдЪреАрдпрд░реНрд╕ред

рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкреАрдЫреЗ рд╕реЛрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@ d-ph рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ ... рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ "рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд" рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ:

image

рдФрд░ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдореЗрдВ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ p рдПрдХ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдкреАрдЖрдИ рд╕рддрд╣ рдХреЗрд╡рд▓ рдмреНрд▓реВрдмрд░реНрдб (рдмрдирд╛рдо рд╡рд╛рджрд╛) рдкрд░ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИред

image

рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд┐рд░ рдпрд╛ рдЯреЗрд▓ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рдЪрд░ рдХреЗ _type_ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

image

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░ рдореБрдЭреЗ bluebird-global рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реАрдорд┐рдд рдПрдкреАрдЖрдИ рд╕рддрд╣ рдорд┐рд▓ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпреЛрдВ рд╣рд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдирдорд╕реНрддреЗред

рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ:/рд╡реЗ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрд░реЗ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗред рдЖрдк рдЕрдкрдиреЗ allSettled() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ bluebird-global рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк Bluebird рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ bluebird-global рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

function allSettled<T>(promises: Array<Promise<T>>) {
    const reflections = Promise.all<T>(promises.map((promise => {
        return promise.reflect();
    })));

    return reflections;
}

рдпрд╛рдиреА рд╡рд╣ рд╕реНрдирд┐рдкреЗрдЯ рд╡реИрд╢реНрд╡рд┐рдХ Promise рдореЗрдВ рдЯрд╛рдЗрдк рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ bluebird-global.d.ts рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛: рдпрд╣ рдЖрдкрдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдФрд░ рдореЗрд░реЗ рджреЛрдиреЛрдВ рд╕реНрдирд┐рдкреЗрдЯ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ред рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ: рдЖрдк рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ Promise рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЖрдк рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдмрдЬрд╛рдп рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде allSettled() рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рдФрд░ рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВред

function allSettled<T>(promises: Array<Promise<T>>) {
    const reflections = Promise.all<T>(promises.map((promise => {
        return promise.reflect();
    })));

    return reflections;
}

let promises = [
    Promise.resolve(),
    Promise.reject(new Error("rejected test")),
    new Promise<void>(() => {}),
];

let reflections = allSettled(promises);

console.log(reflections);
// this is part of my entry point

/*
 * Promise
 */
import * as Promise from 'bluebird';
import 'expose-loader?Promise!bluebird';

image
_Pic 1: Array.map() рдореЗрдВ рд╡рд╛рджрд╛ рдмреНрд▓реВрдмрд░реНрдб рд╣реИ (рдЖрдк рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЧреБрдгреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: _bitField )_

image
_Pic 2: Promise.reflect рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ_

рдХреНрдпрд╛ рдЖрдк рдХреНрд░реЛрдо рджреЗрд╡ рдЯреВрд▓реНрд╕ рдореЗрдВ рдореЗрд░реЗ рдЬреИрд╕реЗ рдЬреЗрдПрд╕ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ promise рдХреЗ рдЕрдВрджрд░ .map рдХреНрдпрд╛ рд╣реИ? рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ: рдХреНрдпрд╛ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЗрд╡рд▓ Promise рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
image

рдпрджрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛:
image

рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдмрд╕ рдПрдХ рджреЗрд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛: рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ $# Array<Promise<T>> $#$ рдХреЗ рдмрдЬрд╛рдп Promise<T>[] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрд╡реЛрдВ рдХреА рд╡рд░реАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рд╕реА рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдХреЛрдИ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рджреЗрд╡ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА-рдкрд╣реБрдВрдЪ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЪреАрдпрд░реНрд╕ред

рдЗрддрдиреА рдЧрд╣рди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдмрд╛рдд рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБ рдХрд┐рд╕ рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ:

рдЖрдпрд╛рдд 'рдПрдХреНрд╕рдкреЛрдЬрд╝-рд▓реЛрдбрд░?рд╡рд╛рджрд╛!рдмреНрд▓реВрдмрд░реНрдб';

@ рдбреА-рдкреАрдПрдЪ рдЖрд╣, рдКрдкрд░ рдПрдХ рд▓рд╛рдЗрдирд░ рд╡рд╣ рдерд╛ рдЬреЛ рдореИрдВ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЖрдкрдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рд╡рд╣рд╛рдБ рдХрднреА рдирд╣реАрдВ рдкрд╣реБрдБрдЪрддрд╛! рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ README рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдПрдХреНрд╕рдкреЛрдЬрд╝ рд▓реЛрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдВрджрд░реНрдн рдерд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рднреА 100% рдирд╣реАрдВ рд╣реВрдВ рдпрджрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдиреЛрдб рдлрд╝рдВрдХреНрд╢рди рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ (рд░рди рдЯрд╛рдЗрдо рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ):

рддреНрд░реБрдЯрд┐: рдореЙрдбреНрдпреВрд▓ 'рдПрдХреНрд╕рдкреЛрдЬрд╝-рд▓реЛрдбрд░? рдкреНрд░реЙрдорд┐рд╕! рдмреНрд▓реВрдмрд░реНрдб' рдирд╣реАрдВ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрд╛

рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, expose-loader рдПрдХ рд╡реЗрдмрдкреИрдХ рдЪреАрдЬрд╝ рд╣реИ (рдПрдХ рд╡реЗрдмрдкреИрдХ рд▓реЛрдбрд░)ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╡реЗрдмрдкреИрдХ рдХреЛ рдЙрд╕ import рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ (рдпрд╛рдиреА рдЖрдкрдХреЛ "рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдвреВрдВрдврд╛ рдЬрд╛ рд╕рдХрддрд╛" рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА)ред

рдпрджрд┐ рдЖрдк рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ/рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдЕрднреА рдорд┐рд▓рд╛: https://github.com/petkaantonov/bluebird/issues/1026 (рдиреЛрдб рдореЗрдВ Promise рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛)ред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рдиреЛрдб 7 рдореЗрдВ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рд░реАрдбрдореЗ рдореЗрдВ expose-loader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА d.ts рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрддрд╛рддрд╛ рд╣реВрдВ, рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд╛рджрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреЗрд╡реЛрдВ рдХрд╛ рдХрд╛рдо рд╣реИ: рд▓рд┐рдВрдХ ред рдЪреВрдВрдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдзреНрдпрд╛рди рд░рдЦреЗрдВ, рдХрд┐ expose-loader window.Promise = Bluebird рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдареАрдХ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ Google рдореЗрд░реЗ рдЙрддреНрддрд░ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ; рдкреА

@ d-ph рджреЗрд╢реА async-рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп AWS рд▓реИрдореНрдмреНрдбрд╛ рдкрд░ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП 6.10.x рдиреЛрдб рдкрд░ рдмрдВрдж рд╣реВрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рд╕ рдореЗрдВ рдореИрдВ рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА async-рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕реЗ ES2015 рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рддрдХ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

рд╡реИрд╕реЗ рднреА, рд▓рд┐рдВрдХ @ рдбреА-рдкреАрдПрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ред рдУрд╣ рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ (рдЬреЛ рд╡рд╛рджрд╛-рднреВрдорд┐ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИрдВ):

export function allSettled<T>(promises: Array<Promise<T>>) {
  const reflections = Promise.all<Promise.Inspection<T>>( promises.map((p => p.reflect())) );
  return reflections as Promise<Array<Promise.Inspection<T>>>;
}

export function settleProps<T>(promiseHash: IDictionary<Promise<T>>) {

  const reflections: IDictionary<Promise<Promise.Inspection<T>>> = Object.keys(promiseHash)
    .reduce((newObject: IDictionary<any>, key: string) => {
      newObject[key] = promiseHash[key].reflect();
      return newObject;
    }, {} as IDictionary<Promise<Promise.Inspection<T>>>);

  return Promise.props(reflections) as Promise<IDictionary<Promise.Inspection<T>>>;
}

рдкреВрд░реНрдг рдЗрдВрдЯреЗрд▓реАрд╕рд┐рдВрдХ/рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИред

@ рдбреА-рдкреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ ...

рдЬрдм рдореИрдВ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ then рдФрд░ catch рджреЛрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдВрддрд░ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдмреНрд▓реВрдмрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдорд╛рдирдХ рд╡рд╛рджрд╛ рдПрдкреАрдЖрдИ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

Promise.resolve(true).catch(Error, () => false)

рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ catch рдХреЗрд╡рд▓ 1 рддрд░реНрдХ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдПрдХ рдФрд░ рдореБрджреНрджрд╛:

Promise.resolve([3]).map((n: number) => true)

рдЗрд╕рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓:

тФВTS2345: Argument of type '(n: number) => boolean' is not assignable to parameter of type 'IterateFunction<{}, boolean>'.           тФВ
тФВ  Types of parameters 'n' and 'item' are incompatible.                                                                             тФВ
тФВ    Type '{}' is not assignable to type 'number'.                                                                                  тФВ

рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рд╡реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рд┐рд░реНрдл рдЯрд╛рдЗрдкрдЪреЗрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рдирдорд╕реНрддреЗ,

.catch(Error, function) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк рдпрд╣ рдХрд╣рдХрд░ рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ .then , .catch (рдФрд░ рдЕрдзрд┐рдХ) рдХреЛ рдмреНрд▓реВрдмрд░реНрдб рдХреЗ рдмрд╛рдХреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢рд┐рд╖реНрдЯ .catch(Error, function) рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдореИрдВрдиреЗ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдореИрдВ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:

Promise.resolve(true).catch(Error, () => false)

рдореИрдВрдиреЗ TS 3.0.1 рдФрд░ 2.9.2 рдХреЗ рд╕рд╛рде рдЬрд╛рдБрдЪ рдХреАред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рдЬреЛ bluebird-global рдХреЗ рдмрд╛рдж рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реЛред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдЯреАрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЯреВрдЯрддрд╛ рд╣реИред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдердм рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВ рдФрд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рддрдереНрдп рджрд┐рдП рдЧрдП рд╣реИрдВ:

  1. рд╕рднреА bluebird-global .map() рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдмрд╕ bluebird.d.ts рдХреА .map() рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рджреЛрд╖ bluebird-global рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди Promise.map() рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ Bluebird.map() рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
import Bluebird = require('bluebird');

Bluebird.resolve([3]).map((n: number) => true); // works

Promise.resolve([3]).map((n: number) => true); // fails
  1. рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ: TS рдиреЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреНрдпреЛрдВ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ n рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ $#$15 {} n рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдореИрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ bluebird.d.ts рдХреЛ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓рдВрдмреА рдХрд╣рд╛рдиреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрдореВрд░реНрдд рдХреА рд╕рднреА рдкрд░рддреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж .map() рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
map<U>(
    mapper: (
        item: U,
        index: number,
        arrayLength: number
    ) => U | PromiseLike<U>,
    options?: Bluebird.ConcurrencyOption
): Bluebird<T extends Iterable<any> ? U[] : never>;

рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ mapper рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ $#$20 item #$ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди (рдпрд╛ рдЙрд╕реА рдХрд╛ рд╡рд╛рджрд╛) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдЗрдЯрдо рдХрд╛ рдкреНрд░рдХрд╛рд░ number рд╣реИ рдФрд░ рд╡рд╛рдкрд╕реА рдХрд╛ рдкреНрд░рдХрд╛рд░ boolean рд╣реИред рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реАрдзреЗ Bluebird рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпреЛрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдпрд╣ рддрдм рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ item рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ any ред bluebird.d.ts рдХреЗ type IterableItem<R> рдФрд░ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред

@d-ph


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

рдореИрдВрдиреЗ map() рдХреЗ "рдЕрдирд▓реЗрдпрд░реНрдб" рдлреЙрд░реНрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛, рдФрд░ mapper рдлрд╝рдВрдХреНрд╢рди рдХреЛ item рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдерд╛)ред рдореЗрд░реА рдЧрд▓рддреАред

рд╕рднреА рдмреНрд▓реВрдмрд░реНрдб-рдЧреНрд▓реЛрдмрд▓ .map() рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдмрд╕ bluebird.d.ts рдХреА .map() рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ Bluebird<R> рд╕реЗ рдЯрд╛рдЗрдк рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ {} рдХреЗ рд▓рд┐рдП R рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ map: typeof Bluebird<T>.prototype.map рдХрд╛рдо рдХрд░реЗрдЧрд╛? (рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ)

рдЬрд░реВрд░реА:
рдпрджрд┐ @types/bluebird-global рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ @types/bluebird рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ @ d-ph рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ

npm install --save-dev @types/bluebird-global рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: рд▓рд┐рдВрдХ (рд▓рд┐рдВрдХ 2017-04-02 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред рдпрд╣ рдЕрдХреЗрд▓реЗ рд╣реА рдЪрд╛рд▓ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдЖрдпрд╛рдд/рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред

рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ: рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ package.json::devDependencies @types/bluebird рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИред

рджреЛрдиреЛрдВ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ @types/bluebird рдФрд░ рдореЗрд░реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рджреЗ ( @types/bluebird-global ) рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕реА рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдорд┐рд╕ рдореИрдЪ рд╣реЛ рд░рд╣рд╛ рдерд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Loghorn picture Loghorn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lilling picture lilling  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alisabzevari picture alisabzevari  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stevermeister picture stevermeister  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

victor-guoyu picture victor-guoyu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ