Skip to content

Commit e98f316

Browse files
committed
bug(esnext): add definition for promise.finally
Fixes microsoft#20411
1 parent 06aeab8 commit e98f316

11 files changed

+49
-31
lines changed

Gulpfile.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ const es2018LibrarySourceMap = es2018LibrarySource.map(source =>
150150
({ target: "lib." + source, sources: ["header.d.ts", source] }));
151151

152152
const esnextLibrarySource = [
153-
"esnext.asynciterable.d.ts"
153+
"esnext.asynciterable.d.ts",
154+
"esnext.promise.d.ts"
154155
];
155156

156157
const esnextLibrarySourceMap = esnextLibrarySource.map(source =>

Jakefile.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,8 @@ var es2018LibrarySourceMap = es2018LibrarySource.map(function (source) {
212212
});
213213

214214
var esnextLibrarySource = [
215-
"esnext.asynciterable.d.ts"
215+
"esnext.asynciterable.d.ts",
216+
"esnext.promise.d.ts"
216217
];
217218

218219
var esnextLibrarySourceMap = esnextLibrarySource.map(function (source) {

src/compiler/commandLineParser.ts

+1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ namespace ts {
145145
"es2017.intl": "lib.es2017.intl.d.ts",
146146
"es2017.typedarrays": "lib.es2017.typedarrays.d.ts",
147147
"esnext.asynciterable": "lib.esnext.asynciterable.d.ts",
148+
"esnext.promise": "lib.esnext.promise.d.ts",
148149
}),
149150
},
150151
showInSimplifiedHelpView: true,

src/harness/unittests/commandLineParsing.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ namespace ts {
6060
assertParseResult(["--lib", "es5,invalidOption", "0.ts"],
6161
{
6262
errors: [{
63-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
63+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
6464
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
6565
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
6666

@@ -263,7 +263,7 @@ namespace ts {
263263
assertParseResult(["--lib", "es5,", "es7", "0.ts"],
264264
{
265265
errors: [{
266-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
266+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
267267
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
268268
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
269269

@@ -283,7 +283,7 @@ namespace ts {
283283
assertParseResult(["--lib", "es5, ", "es7", "0.ts"],
284284
{
285285
errors: [{
286-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
286+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
287287
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
288288
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
289289

src/harness/unittests/convertCompilerOptionsFromJson.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ namespace ts {
266266
file: undefined,
267267
start: 0,
268268
length: 0,
269-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
269+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
270270
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
271271
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
272272
}]
@@ -297,7 +297,7 @@ namespace ts {
297297
file: undefined,
298298
start: 0,
299299
length: 0,
300-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
300+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
301301
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
302302
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
303303
}]
@@ -328,7 +328,7 @@ namespace ts {
328328
file: undefined,
329329
start: 0,
330330
length: 0,
331-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
331+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
332332
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
333333
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
334334
}]
@@ -359,7 +359,7 @@ namespace ts {
359359
file: undefined,
360360
start: 0,
361361
length: 0,
362-
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable'.",
362+
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'esnext', 'dom', 'dom.iterable', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'esnext.asynciterable', 'esnext.promise'.",
363363
code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
364364
category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category
365365
}]

src/lib/esnext.d.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
/// <reference path="lib.es2017.d.ts" />
1+
/// <reference path="lib.es2018.d.ts" />
22
/// <reference path="lib.esnext.asynciterable.d.ts" />
3+
/// <reference path="lib.esnext.promise.d.ts" />

src/lib/esnext.promise.d.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* Represents the completion of an asynchronous operation
3+
*/
4+
interface Promise<T> {
5+
/**
6+
* Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
7+
* resolved value cannot be modified from the callback.
8+
* @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
9+
* @returns A Promise for the completion of the callback.
10+
*/
11+
finally<TResult = never>(
12+
onfinally?: (() => TResult | PromiseLike<TResult>) | undefined | null
13+
): Promise<T | TResult>;
14+
}

0 commit comments

Comments
 (0)