mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Handle intersections in isGenericTypeWithoutNullableConstraint (#50497)
* Handle intersections in isGenericTypeWithoutNullableConstraint * Add regression test
This commit is contained in:
parent
ed6889cd5b
commit
6d170b490d
@ -25789,8 +25789,10 @@ namespace ts {
|
||||
!!(type.flags & TypeFlags.Instantiable && getBaseConstraintOrType(type).flags & (TypeFlags.Nullable | TypeFlags.Union));
|
||||
}
|
||||
|
||||
function isGenericTypeWithoutNullableConstraint(type: Type) {
|
||||
return !!(type.flags & TypeFlags.Instantiable && !maybeTypeOfKind(getBaseConstraintOrType(type), TypeFlags.Nullable));
|
||||
function isGenericTypeWithoutNullableConstraint(type: Type): boolean {
|
||||
return type.flags & TypeFlags.Intersection ?
|
||||
some((type as IntersectionType).types, isGenericTypeWithoutNullableConstraint) :
|
||||
!!(type.flags & TypeFlags.Instantiable && !maybeTypeOfKind(getBaseConstraintOrType(type), TypeFlags.Nullable));
|
||||
}
|
||||
|
||||
function hasContextualTypeWithNoGenericTypes(node: Node, checkMode: CheckMode | undefined) {
|
||||
|
||||
@ -240,4 +240,12 @@ tests/cases/conformance/controlFlow/controlFlowGenericTypes.ts(168,9): error TS2
|
||||
control[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Repro from #50465
|
||||
|
||||
type Column<T> = (keyof T extends never ? { id?: number | string } : { id: T }) & { title?: string; }
|
||||
|
||||
function getColumnProperty<T>(column: Column<T>, key: keyof Column<T>) {
|
||||
return column[key];
|
||||
}
|
||||
|
||||
@ -210,6 +210,14 @@ function update<T extends Control, K extends keyof T>(control : T | undefined, k
|
||||
control[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Repro from #50465
|
||||
|
||||
type Column<T> = (keyof T extends never ? { id?: number | string } : { id: T }) & { title?: string; }
|
||||
|
||||
function getColumnProperty<T>(column: Column<T>, key: keyof Column<T>) {
|
||||
return column[key];
|
||||
}
|
||||
|
||||
|
||||
//// [controlFlowGenericTypes.js]
|
||||
@ -368,3 +376,6 @@ function update(control, key, value) {
|
||||
control[key] = value;
|
||||
}
|
||||
}
|
||||
function getColumnProperty(column, key) {
|
||||
return column[key];
|
||||
}
|
||||
|
||||
@ -626,3 +626,29 @@ function update<T extends Control, K extends keyof T>(control : T | undefined, k
|
||||
}
|
||||
}
|
||||
|
||||
// Repro from #50465
|
||||
|
||||
type Column<T> = (keyof T extends never ? { id?: number | string } : { id: T }) & { title?: string; }
|
||||
>Column : Symbol(Column, Decl(controlFlowGenericTypes.ts, 210, 1))
|
||||
>T : Symbol(T, Decl(controlFlowGenericTypes.ts, 214, 12))
|
||||
>T : Symbol(T, Decl(controlFlowGenericTypes.ts, 214, 12))
|
||||
>id : Symbol(id, Decl(controlFlowGenericTypes.ts, 214, 43))
|
||||
>id : Symbol(id, Decl(controlFlowGenericTypes.ts, 214, 70))
|
||||
>T : Symbol(T, Decl(controlFlowGenericTypes.ts, 214, 12))
|
||||
>title : Symbol(title, Decl(controlFlowGenericTypes.ts, 214, 83))
|
||||
|
||||
function getColumnProperty<T>(column: Column<T>, key: keyof Column<T>) {
|
||||
>getColumnProperty : Symbol(getColumnProperty, Decl(controlFlowGenericTypes.ts, 214, 101))
|
||||
>T : Symbol(T, Decl(controlFlowGenericTypes.ts, 216, 27))
|
||||
>column : Symbol(column, Decl(controlFlowGenericTypes.ts, 216, 30))
|
||||
>Column : Symbol(Column, Decl(controlFlowGenericTypes.ts, 210, 1))
|
||||
>T : Symbol(T, Decl(controlFlowGenericTypes.ts, 216, 27))
|
||||
>key : Symbol(key, Decl(controlFlowGenericTypes.ts, 216, 48))
|
||||
>Column : Symbol(Column, Decl(controlFlowGenericTypes.ts, 210, 1))
|
||||
>T : Symbol(T, Decl(controlFlowGenericTypes.ts, 216, 27))
|
||||
|
||||
return column[key];
|
||||
>column : Symbol(column, Decl(controlFlowGenericTypes.ts, 216, 30))
|
||||
>key : Symbol(key, Decl(controlFlowGenericTypes.ts, 216, 48))
|
||||
}
|
||||
|
||||
|
||||
@ -583,3 +583,22 @@ function update<T extends Control, K extends keyof T>(control : T | undefined, k
|
||||
}
|
||||
}
|
||||
|
||||
// Repro from #50465
|
||||
|
||||
type Column<T> = (keyof T extends never ? { id?: number | string } : { id: T }) & { title?: string; }
|
||||
>Column : Column<T>
|
||||
>id : string | number | undefined
|
||||
>id : T
|
||||
>title : string | undefined
|
||||
|
||||
function getColumnProperty<T>(column: Column<T>, key: keyof Column<T>) {
|
||||
>getColumnProperty : <T>(column: Column<T>, key: keyof Column<T>) => Column<T>["title" | keyof (keyof T extends never ? { id?: string | number | undefined; } : { id: T; })]
|
||||
>column : Column<T>
|
||||
>key : "title" | keyof (keyof T extends never ? { id?: string | number | undefined; } : { id: T; })
|
||||
|
||||
return column[key];
|
||||
>column[key] : Column<T>["title" | keyof (keyof T extends never ? { id?: string | number | undefined; } : { id: T; })]
|
||||
>column : Column<T>
|
||||
>key : "title" | keyof (keyof T extends never ? { id?: string | number | undefined; } : { id: T; })
|
||||
}
|
||||
|
||||
|
||||
@ -211,3 +211,11 @@ function update<T extends Control, K extends keyof T>(control : T | undefined, k
|
||||
control[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Repro from #50465
|
||||
|
||||
type Column<T> = (keyof T extends never ? { id?: number | string } : { id: T }) & { title?: string; }
|
||||
|
||||
function getColumnProperty<T>(column: Column<T>, key: keyof Column<T>) {
|
||||
return column[key];
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user