File tree Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -6825,6 +6825,27 @@ namespace ts {
6825
6825
}
6826
6826
}
6827
6827
6828
+ if (target.flags & TypeFlags.TypeParameter) {
6829
+ // Given a type parameter K with a constraint keyof T, a type S is
6830
+ // assignable to K if S is assignable to keyof T.
6831
+ let constraint = getConstraintOfTypeParameter(<TypeParameter>target);
6832
+ if (constraint && constraint.flags & TypeFlags.Index) {
6833
+ if (result = isRelatedTo(source, constraint, reportErrors)) {
6834
+ return result;
6835
+ }
6836
+ }
6837
+ }
6838
+ else if (target.flags & TypeFlags.Index) {
6839
+ // Given a type parameter T with a constraint C, a type S is assignable to
6840
+ // keyof T if S is assignable to keyof C.
6841
+ let constraint = getConstraintOfTypeParameter((<IndexType>target).type);
6842
+ if (constraint) {
6843
+ if (result = isRelatedTo(source, getIndexType(constraint), reportErrors)) {
6844
+ return result;
6845
+ }
6846
+ }
6847
+ }
6848
+
6828
6849
if (source.flags & TypeFlags.TypeParameter) {
6829
6850
let constraint = getConstraintOfTypeParameter(<TypeParameter>source);
6830
6851
Original file line number Diff line number Diff line change @@ -2709,7 +2709,7 @@ namespace ts {
2709
2709
EnumLike = Enum | EnumLiteral ,
2710
2710
UnionOrIntersection = Union | Intersection ,
2711
2711
StructuredType = Object | Union | Intersection ,
2712
- StructuredOrTypeParameter = StructuredType | TypeParameter ,
2712
+ StructuredOrTypeParameter = StructuredType | TypeParameter | Index ,
2713
2713
2714
2714
// 'Narrowable' types are types where narrowing actually narrows.
2715
2715
// This *should* be every type other than null, undefined, void, and never
You can’t perform that action at this time.
0 commit comments