Skip to content

Commit e3f11a8

Browse files
committed
Go back to instantiating only conditional types
1 parent 36433b1 commit e3f11a8

6 files changed

+25
-265
lines changed

src/compiler/checker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -30754,7 +30754,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
3075430754
// replaced with their constraints similar to the apparent type.
3075530755
if (
3075630756
inferenceContext &&
30757-
(contextFlags! & ContextFlags.Signature || maybeTypeOfKind(contextualType, TypeFlags.Simplifiable)) &&
30757+
(contextFlags! & ContextFlags.Signature || maybeTypeOfKind(contextualType, TypeFlags.Conditional)) &&
3075830758
some(inferenceContext.inferences, hasInferenceCandidatesOrDefault)
3075930759
) {
3076030760
// For contextual signatures we incorporate all inferences made so far, e.g. from return

tests/baselines/reference/contextualInnerCallFromIndexedAccessType.symbols

-108
This file was deleted.

tests/baselines/reference/contextualInnerCallFromIndexedAccessType.types

-92
This file was deleted.

tests/baselines/reference/reverseMappedTypeIntersectionConstraint.errors.txt

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
reverseMappedTypeIntersectionConstraint.ts(22,3): error TS2353: Object literal may only specify known properties, and 'extra' does not exist in type '{ entry: string; states: { a: { entry: string; }; }; }'.
2-
reverseMappedTypeIntersectionConstraint.ts(32,3): error TS2353: Object literal may only specify known properties, and 'extra' does not exist in type '{ entry: string; states: { a: { entry: string; }; }; }'.
1+
reverseMappedTypeIntersectionConstraint.ts(19,7): error TS2322: Type '"bar"' is not assignable to type '"foo"'.
2+
reverseMappedTypeIntersectionConstraint.ts(32,3): error TS2353: Object literal may only specify known properties, and 'extra' does not exist in type '{ entry: "foo"; states: { a: { entry: "foo"; }; }; }'.
33
reverseMappedTypeIntersectionConstraint.ts(43,3): error TS2353: Object literal may only specify known properties, and 'z' does not exist in type '{ x: number; y: "y"; }'.
44
reverseMappedTypeIntersectionConstraint.ts(59,7): error TS2322: Type '{ [K in keyof T & keyof Stuff]: T[K]; }' is not assignable to type 'T'.
55
'{ [K in keyof T & keyof Stuff]: T[K]; }' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'Stuff'.
@@ -37,11 +37,12 @@ reverseMappedTypeIntersectionConstraint.ts(171,3): error TS2353: Object literal
3737
states: {
3838
a: {
3939
entry: "bar",
40+
~~~~~
41+
!!! error TS2322: Type '"bar"' is not assignable to type '"foo"'.
42+
!!! related TS6500 reverseMappedTypeIntersectionConstraint.ts:2:3: The expected type comes from property 'entry' which is declared here on type 'StateConfig<"foo">'
4043
},
4144
},
4245
extra: 12,
43-
~~~~~
44-
!!! error TS2353: Object literal may only specify known properties, and 'extra' does not exist in type '{ entry: string; states: { a: { entry: string; }; }; }'.
4546
});
4647

4748
const inferredParams2 = createMachine({
@@ -53,7 +54,7 @@ reverseMappedTypeIntersectionConstraint.ts(171,3): error TS2353: Object literal
5354
},
5455
extra: 12,
5556
~~~~~
56-
!!! error TS2353: Object literal may only specify known properties, and 'extra' does not exist in type '{ entry: string; states: { a: { entry: string; }; }; }'.
57+
!!! error TS2353: Object literal may only specify known properties, and 'extra' does not exist in type '{ entry: "foo"; states: { a: { entry: "foo"; }; }; }'.
5758
});
5859

5960

tests/baselines/reference/reverseMappedTypeIntersectionConstraint.types

+18-18
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,25 @@ declare function createMachine<
2929
>config : { [K in keyof TConfig & keyof StateConfig<any>]: TConfig[K]; }
3030

3131
const inferredParams1 = createMachine({
32-
>inferredParams1 : [string, { entry: string; states: { a: { entry: string; }; }; }]
33-
>createMachine({ entry: "foo", states: { a: { entry: "bar", }, }, extra: 12,}) : [string, { entry: string; states: { a: { entry: string; }; }; }]
32+
>inferredParams1 : ["foo", StateConfig<"foo">]
33+
>createMachine({ entry: "foo", states: { a: { entry: "bar", }, }, extra: 12,}) : ["foo", StateConfig<"foo">]
3434
>createMachine : <TConfig extends StateConfig<TAction>, TAction extends string = TConfig["entry"] extends string ? TConfig["entry"] : string>(config: { [K in keyof TConfig & keyof StateConfig<any>]: TConfig[K]; }) => [TAction, TConfig]
35-
>{ entry: "foo", states: { a: { entry: "bar", }, }, extra: 12,} : { entry: string; states: { a: { entry: string; }; }; extra: number; }
35+
>{ entry: "foo", states: { a: { entry: "bar", }, }, extra: 12,} : { entry: "foo"; states: { a: { entry: "bar"; }; }; extra: number; }
3636

3737
entry: "foo",
38-
>entry : string
38+
>entry : "foo"
3939
>"foo" : "foo"
4040

4141
states: {
42-
>states : { a: { entry: string; }; }
43-
>{ a: { entry: "bar", }, } : { a: { entry: string; }; }
42+
>states : { a: { entry: "bar"; }; }
43+
>{ a: { entry: "bar", }, } : { a: { entry: "bar"; }; }
4444

4545
a: {
46-
>a : { entry: string; }
47-
>{ entry: "bar", } : { entry: string; }
46+
>a : { entry: "bar"; }
47+
>{ entry: "bar", } : { entry: "bar"; }
4848

4949
entry: "bar",
50-
>entry : string
50+
>entry : "bar"
5151
>"bar" : "bar"
5252

5353
},
@@ -59,25 +59,25 @@ const inferredParams1 = createMachine({
5959
});
6060

6161
const inferredParams2 = createMachine({
62-
>inferredParams2 : [string, { entry: string; states: { a: { entry: string; }; }; }]
63-
>createMachine({ entry: "foo", states: { a: { entry: "foo", }, }, extra: 12,}) : [string, { entry: string; states: { a: { entry: string; }; }; }]
62+
>inferredParams2 : ["foo", { entry: "foo"; states: { a: { entry: "foo"; }; }; }]
63+
>createMachine({ entry: "foo", states: { a: { entry: "foo", }, }, extra: 12,}) : ["foo", { entry: "foo"; states: { a: { entry: "foo"; }; }; }]
6464
>createMachine : <TConfig extends StateConfig<TAction>, TAction extends string = TConfig["entry"] extends string ? TConfig["entry"] : string>(config: { [K in keyof TConfig & keyof StateConfig<any>]: TConfig[K]; }) => [TAction, TConfig]
65-
>{ entry: "foo", states: { a: { entry: "foo", }, }, extra: 12,} : { entry: string; states: { a: { entry: string; }; }; extra: number; }
65+
>{ entry: "foo", states: { a: { entry: "foo", }, }, extra: 12,} : { entry: "foo"; states: { a: { entry: "foo"; }; }; extra: number; }
6666

6767
entry: "foo",
68-
>entry : string
68+
>entry : "foo"
6969
>"foo" : "foo"
7070

7171
states: {
72-
>states : { a: { entry: string; }; }
73-
>{ a: { entry: "foo", }, } : { a: { entry: string; }; }
72+
>states : { a: { entry: "foo"; }; }
73+
>{ a: { entry: "foo", }, } : { a: { entry: "foo"; }; }
7474

7575
a: {
76-
>a : { entry: string; }
77-
>{ entry: "foo", } : { entry: string; }
76+
>a : { entry: "foo"; }
77+
>{ entry: "foo", } : { entry: "foo"; }
7878

7979
entry: "foo",
80-
>entry : string
80+
>entry : "foo"
8181
>"foo" : "foo"
8282

8383
},

tests/cases/compiler/contextualInnerCallFromIndexedAccessType.ts

-41
This file was deleted.

0 commit comments

Comments
 (0)