Skip to content

Commit 0e23eac

Browse files
committed
Improve typing for Generators and Async Generators
1 parent 645853a commit 0e23eac

File tree

271 files changed

+3065
-1646
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

271 files changed

+3065
-1646
lines changed

src/compiler/checker.ts

+564-226
Large diffs are not rendered by default.

src/compiler/commandLineParser.ts

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ namespace ts {
3939
["es2017.string", "lib.es2017.string.d.ts"],
4040
["es2017.intl", "lib.es2017.intl.d.ts"],
4141
["es2017.typedarrays", "lib.es2017.typedarrays.d.ts"],
42+
["es2018.asyncgenerator", "lib.es2018.asyncgenerator.d.ts"],
4243
["es2018.asynciterable", "lib.es2018.asynciterable.d.ts"],
4344
["es2018.intl", "lib.es2018.intl.d.ts"],
4445
["es2018.promise", "lib.es2018.promise.d.ts"],

src/compiler/diagnosticMessages.json

+8
Original file line numberDiff line numberDiff line change
@@ -3899,6 +3899,10 @@
38993899
"category": "Message",
39003900
"code": 6217
39013901
},
3902+
"Enable strict checking of generator types.": {
3903+
"category": "Message",
3904+
"code": 6218
3905+
},
39023906

39033907
"Projects to reference": {
39043908
"category": "Message",
@@ -4256,6 +4260,10 @@
42564260
"category": "Error",
42574261
"code": 7051
42584262
},
4263+
"Generator implicitly has type '{0}' because it does not yield or return any values. Consider supplying a return type.": {
4264+
"category": "Error",
4265+
"code": 7052
4266+
},
42594267

42604268
"You cannot rename this element.": {
42614269
"category": "Error",

src/compiler/types.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -4226,13 +4226,21 @@ namespace ts {
42264226
regularType: ResolvedType; // Regular version of fresh type
42274227
}
42284228

4229+
/* @internal */
4230+
export interface IterationTypes {
4231+
yieldType?: Type;
4232+
returnType?: Type;
4233+
nextType?: Type;
4234+
}
4235+
42294236
// Just a place to cache element types of iterables and iterators
42304237
/* @internal */
42314238
export interface IterableOrIteratorType extends ObjectType, UnionType {
4232-
iteratedTypeOfIterable?: Type;
4233-
iteratedTypeOfIterator?: Type;
4234-
iteratedTypeOfAsyncIterable?: Type;
4235-
iteratedTypeOfAsyncIterator?: Type;
4239+
iterationTypesOfIterable?: IterationTypes;
4240+
iterationTypesOfIterator?: IterationTypes;
4241+
iterationTypesOfAsyncIterable?: IterationTypes;
4242+
iterationTypesOfAsyncIterator?: IterationTypes;
4243+
iterationTypesOfIteratorResult?: IterationTypes;
42364244
}
42374245

42384246
/* @internal */

src/lib/es2015.generator.d.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
interface Generator extends Iterator<any> { }
1+
/// <reference lib="es2015.iterable" />
2+
3+
interface Generator<TYield = unknown, TReturn = void, TNext = unknown> {
4+
next(value?: TNext): IteratorResult<TYield, TReturn>;
5+
return(value: TReturn): IteratorResult<TYield, TReturn>;
6+
throw(e: any): IteratorResult<TYield, TReturn>;
7+
[Symbol.iterator](): Generator<TYield, TReturn, TNext>;
8+
}
29

310
interface GeneratorFunction {
411
/**

0 commit comments

Comments
 (0)