Skip to content

Commit fbe002a

Browse files
authored
Merge pull request #16502 from Microsoft/fix16211
Fix 'extends' with type parameter default returned from superclass construct signature
2 parents 6800891 + 73d63ec commit fbe002a

File tree

5 files changed

+197
-92
lines changed

5 files changed

+197
-92
lines changed

src/compiler/checker.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -4826,12 +4826,9 @@ namespace ts {
48264826
}
48274827

48284828
function getInstantiatedConstructorsForTypeArguments(type: Type, typeArgumentNodes: TypeNode[], location: Node): Signature[] {
4829-
let signatures = getConstructorsForTypeArguments(type, typeArgumentNodes, location);
4830-
if (typeArgumentNodes) {
4831-
const typeArguments = map(typeArgumentNodes, getTypeFromTypeNode);
4832-
signatures = map(signatures, sig => getSignatureInstantiation(sig, typeArguments));
4833-
}
4834-
return signatures;
4829+
const signatures = getConstructorsForTypeArguments(type, typeArgumentNodes, location);
4830+
const typeArguments = map(typeArgumentNodes, getTypeFromTypeNode);
4831+
return sameMap(signatures, sig => some(sig.typeParameters) ? getSignatureInstantiation(sig, typeArguments) : sig);
48354832
}
48364833

48374834
/**
@@ -20946,7 +20943,7 @@ namespace ts {
2094620943
const staticBaseType = getApparentType(baseConstructorType);
2094720944
checkBaseTypeAccessibility(staticBaseType, baseTypeNode);
2094820945
checkSourceElement(baseTypeNode.expression);
20949-
if (baseTypeNode.typeArguments) {
20946+
if (some(baseTypeNode.typeArguments)) {
2095020947
forEach(baseTypeNode.typeArguments, checkSourceElement);
2095120948
for (const constructor of getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode)) {
2095220949
if (!checkTypeArgumentConstraints(constructor.typeParameters, baseTypeNode.typeArguments)) {
@@ -23929,6 +23926,11 @@ namespace ts {
2392923926
const sourceFile = getSourceFileOfNode(node);
2393023927
return grammarErrorAtPos(sourceFile, types.pos, 0, Diagnostics._0_list_cannot_be_empty, listType);
2393123928
}
23929+
return forEach(types, checkGrammarExpressionWithTypeArguments);
23930+
}
23931+
23932+
function checkGrammarExpressionWithTypeArguments(node: ExpressionWithTypeArguments) {
23933+
return checkGrammarTypeArguments(node, node.typeArguments);
2393223934
}
2393323935

2393423936
function checkGrammarClassDeclarationHeritageClauses(node: ClassLikeDeclaration) {

tests/baselines/reference/genericDefaults.js

+23-2
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,15 @@ const Derived02c01 = new Derived02(1);
458458
const Derived02c02 = new Derived02<number>();
459459
const Derived02c03 = new Derived02<number>(1);
460460

461+
// https://github.com/Microsoft/TypeScript/issues/16211
462+
interface Base02 {}
463+
interface Base02Constructor { new <T = A>(a: T): Base02 & T; }
464+
declare const Base02: Base02Constructor;
465+
declare class Derived03 extends Base02 {}
466+
const Derived03c00 = new Derived03(ab);
467+
const Derived03c01 = Derived03c00.a;
468+
type DerivedProps = keyof Derived03;
469+
461470
type t00<T = number> = { a: T; }
462471
const t00c00 = (<t00>x).a;
463472
const t00c01 = (<t00<number>>x).a;
@@ -478,8 +487,7 @@ const t03c00 = (<t03<number>>x).a;
478487
const t03c01 = (<t03<1>>x).a;
479488
const t03c02 = (<t03<number, number>>x).a;
480489
const t03c03 = (<t03<1, 1>>x).a;
481-
const t03c04 = (<t03<number, 1>>x).a;
482-
490+
const t03c04 = (<t03<number, 1>>x).a;
483491

484492
//// [genericDefaults.js]
485493
// no inference
@@ -834,6 +842,8 @@ var Derived02c00 = new Derived02();
834842
var Derived02c01 = new Derived02(1);
835843
var Derived02c02 = new Derived02();
836844
var Derived02c03 = new Derived02(1);
845+
var Derived03c00 = new Derived03(ab);
846+
var Derived03c01 = Derived03c00.a;
837847
var t00c00 = x.a;
838848
var t00c01 = x.a;
839849
var t01c00 = x.a;
@@ -977,6 +987,17 @@ declare const Derived02c00: Derived02<string>;
977987
declare const Derived02c01: Derived02<number>;
978988
declare const Derived02c02: Derived02<number>;
979989
declare const Derived02c03: Derived02<number>;
990+
interface Base02 {
991+
}
992+
interface Base02Constructor {
993+
new <T = A>(a: T): Base02 & T;
994+
}
995+
declare const Base02: Base02Constructor;
996+
declare class Derived03 extends Base02 {
997+
}
998+
declare const Derived03c00: Derived03;
999+
declare const Derived03c01: number;
1000+
declare type DerivedProps = keyof Derived03;
9801001
declare type t00<T = number> = {
9811002
a: T;
9821003
};

tests/baselines/reference/genericDefaults.symbols

+118-82
Original file line numberDiff line numberDiff line change
@@ -2123,135 +2123,171 @@ const Derived02c03 = new Derived02<number>(1);
21232123
>Derived02c03 : Symbol(Derived02c03, Decl(genericDefaults.ts, 457, 5))
21242124
>Derived02 : Symbol(Derived02, Decl(genericDefaults.ts, 451, 46))
21252125

2126+
// https://github.com/Microsoft/TypeScript/issues/16211
2127+
interface Base02 {}
2128+
>Base02 : Symbol(Base02, Decl(genericDefaults.ts, 457, 46), Decl(genericDefaults.ts, 462, 13))
2129+
2130+
interface Base02Constructor { new <T = A>(a: T): Base02 & T; }
2131+
>Base02Constructor : Symbol(Base02Constructor, Decl(genericDefaults.ts, 460, 19))
2132+
>T : Symbol(T, Decl(genericDefaults.ts, 461, 35))
2133+
>A : Symbol(A, Decl(genericDefaults.ts, 0, 0))
2134+
>a : Symbol(a, Decl(genericDefaults.ts, 461, 42))
2135+
>T : Symbol(T, Decl(genericDefaults.ts, 461, 35))
2136+
>Base02 : Symbol(Base02, Decl(genericDefaults.ts, 457, 46), Decl(genericDefaults.ts, 462, 13))
2137+
>T : Symbol(T, Decl(genericDefaults.ts, 461, 35))
2138+
2139+
declare const Base02: Base02Constructor;
2140+
>Base02 : Symbol(Base02, Decl(genericDefaults.ts, 457, 46), Decl(genericDefaults.ts, 462, 13))
2141+
>Base02Constructor : Symbol(Base02Constructor, Decl(genericDefaults.ts, 460, 19))
2142+
2143+
declare class Derived03 extends Base02 {}
2144+
>Derived03 : Symbol(Derived03, Decl(genericDefaults.ts, 462, 40))
2145+
>Base02 : Symbol(Base02, Decl(genericDefaults.ts, 457, 46), Decl(genericDefaults.ts, 462, 13))
2146+
2147+
const Derived03c00 = new Derived03(ab);
2148+
>Derived03c00 : Symbol(Derived03c00, Decl(genericDefaults.ts, 464, 5))
2149+
>Derived03 : Symbol(Derived03, Decl(genericDefaults.ts, 462, 40))
2150+
>ab : Symbol(ab, Decl(genericDefaults.ts, 11, 13))
2151+
2152+
const Derived03c01 = Derived03c00.a;
2153+
>Derived03c01 : Symbol(Derived03c01, Decl(genericDefaults.ts, 465, 5))
2154+
>Derived03c00.a : Symbol(A.a, Decl(genericDefaults.ts, 0, 13))
2155+
>Derived03c00 : Symbol(Derived03c00, Decl(genericDefaults.ts, 464, 5))
2156+
>a : Symbol(A.a, Decl(genericDefaults.ts, 0, 13))
2157+
2158+
type DerivedProps = keyof Derived03;
2159+
>DerivedProps : Symbol(DerivedProps, Decl(genericDefaults.ts, 465, 36))
2160+
>Derived03 : Symbol(Derived03, Decl(genericDefaults.ts, 462, 40))
2161+
21262162
type t00<T = number> = { a: T; }
2127-
>t00 : Symbol(t00, Decl(genericDefaults.ts, 457, 46))
2128-
>T : Symbol(T, Decl(genericDefaults.ts, 459, 9))
2129-
>a : Symbol(a, Decl(genericDefaults.ts, 459, 24))
2130-
>T : Symbol(T, Decl(genericDefaults.ts, 459, 9))
2163+
>t00 : Symbol(t00, Decl(genericDefaults.ts, 466, 36))
2164+
>T : Symbol(T, Decl(genericDefaults.ts, 468, 9))
2165+
>a : Symbol(a, Decl(genericDefaults.ts, 468, 24))
2166+
>T : Symbol(T, Decl(genericDefaults.ts, 468, 9))
21312167

21322168
const t00c00 = (<t00>x).a;
2133-
>t00c00 : Symbol(t00c00, Decl(genericDefaults.ts, 460, 5))
2134-
>(<t00>x).a : Symbol(a, Decl(genericDefaults.ts, 459, 24))
2135-
>t00 : Symbol(t00, Decl(genericDefaults.ts, 457, 46))
2169+
>t00c00 : Symbol(t00c00, Decl(genericDefaults.ts, 469, 5))
2170+
>(<t00>x).a : Symbol(a, Decl(genericDefaults.ts, 468, 24))
2171+
>t00 : Symbol(t00, Decl(genericDefaults.ts, 466, 36))
21362172
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2137-
>a : Symbol(a, Decl(genericDefaults.ts, 459, 24))
2173+
>a : Symbol(a, Decl(genericDefaults.ts, 468, 24))
21382174

21392175
const t00c01 = (<t00<number>>x).a;
2140-
>t00c01 : Symbol(t00c01, Decl(genericDefaults.ts, 461, 5))
2141-
>(<t00<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 459, 24))
2142-
>t00 : Symbol(t00, Decl(genericDefaults.ts, 457, 46))
2176+
>t00c01 : Symbol(t00c01, Decl(genericDefaults.ts, 470, 5))
2177+
>(<t00<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 468, 24))
2178+
>t00 : Symbol(t00, Decl(genericDefaults.ts, 466, 36))
21432179
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2144-
>a : Symbol(a, Decl(genericDefaults.ts, 459, 24))
2180+
>a : Symbol(a, Decl(genericDefaults.ts, 468, 24))
21452181

21462182
type t01<T, U = T> = { a: [T, U]; }
2147-
>t01 : Symbol(t01, Decl(genericDefaults.ts, 461, 34))
2148-
>T : Symbol(T, Decl(genericDefaults.ts, 463, 9))
2149-
>U : Symbol(U, Decl(genericDefaults.ts, 463, 11))
2150-
>T : Symbol(T, Decl(genericDefaults.ts, 463, 9))
2151-
>a : Symbol(a, Decl(genericDefaults.ts, 463, 22))
2152-
>T : Symbol(T, Decl(genericDefaults.ts, 463, 9))
2153-
>U : Symbol(U, Decl(genericDefaults.ts, 463, 11))
2183+
>t01 : Symbol(t01, Decl(genericDefaults.ts, 470, 34))
2184+
>T : Symbol(T, Decl(genericDefaults.ts, 472, 9))
2185+
>U : Symbol(U, Decl(genericDefaults.ts, 472, 11))
2186+
>T : Symbol(T, Decl(genericDefaults.ts, 472, 9))
2187+
>a : Symbol(a, Decl(genericDefaults.ts, 472, 22))
2188+
>T : Symbol(T, Decl(genericDefaults.ts, 472, 9))
2189+
>U : Symbol(U, Decl(genericDefaults.ts, 472, 11))
21542190

21552191
const t01c00 = (<t01<number>>x).a;
2156-
>t01c00 : Symbol(t01c00, Decl(genericDefaults.ts, 464, 5))
2157-
>(<t01<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 463, 22))
2158-
>t01 : Symbol(t01, Decl(genericDefaults.ts, 461, 34))
2192+
>t01c00 : Symbol(t01c00, Decl(genericDefaults.ts, 473, 5))
2193+
>(<t01<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 472, 22))
2194+
>t01 : Symbol(t01, Decl(genericDefaults.ts, 470, 34))
21592195
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2160-
>a : Symbol(a, Decl(genericDefaults.ts, 463, 22))
2196+
>a : Symbol(a, Decl(genericDefaults.ts, 472, 22))
21612197

21622198
const t01c01 = (<t01<number, string>>x).a;
2163-
>t01c01 : Symbol(t01c01, Decl(genericDefaults.ts, 465, 5))
2164-
>(<t01<number, string>>x).a : Symbol(a, Decl(genericDefaults.ts, 463, 22))
2165-
>t01 : Symbol(t01, Decl(genericDefaults.ts, 461, 34))
2199+
>t01c01 : Symbol(t01c01, Decl(genericDefaults.ts, 474, 5))
2200+
>(<t01<number, string>>x).a : Symbol(a, Decl(genericDefaults.ts, 472, 22))
2201+
>t01 : Symbol(t01, Decl(genericDefaults.ts, 470, 34))
21662202
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2167-
>a : Symbol(a, Decl(genericDefaults.ts, 463, 22))
2203+
>a : Symbol(a, Decl(genericDefaults.ts, 472, 22))
21682204

21692205
type t02<T extends number, U = T> = { a: [T, U]; }
2170-
>t02 : Symbol(t02, Decl(genericDefaults.ts, 465, 42))
2171-
>T : Symbol(T, Decl(genericDefaults.ts, 467, 9))
2172-
>U : Symbol(U, Decl(genericDefaults.ts, 467, 26))
2173-
>T : Symbol(T, Decl(genericDefaults.ts, 467, 9))
2174-
>a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2175-
>T : Symbol(T, Decl(genericDefaults.ts, 467, 9))
2176-
>U : Symbol(U, Decl(genericDefaults.ts, 467, 26))
2206+
>t02 : Symbol(t02, Decl(genericDefaults.ts, 474, 42))
2207+
>T : Symbol(T, Decl(genericDefaults.ts, 476, 9))
2208+
>U : Symbol(U, Decl(genericDefaults.ts, 476, 26))
2209+
>T : Symbol(T, Decl(genericDefaults.ts, 476, 9))
2210+
>a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
2211+
>T : Symbol(T, Decl(genericDefaults.ts, 476, 9))
2212+
>U : Symbol(U, Decl(genericDefaults.ts, 476, 26))
21772213

21782214
const t02c00 = (<t02<number>>x).a;
2179-
>t02c00 : Symbol(t02c00, Decl(genericDefaults.ts, 468, 5))
2180-
>(<t02<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2181-
>t02 : Symbol(t02, Decl(genericDefaults.ts, 465, 42))
2215+
>t02c00 : Symbol(t02c00, Decl(genericDefaults.ts, 477, 5))
2216+
>(<t02<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
2217+
>t02 : Symbol(t02, Decl(genericDefaults.ts, 474, 42))
21822218
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2183-
>a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2219+
>a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
21842220

21852221
const t02c01 = (<t02<1>>x).a;
2186-
>t02c01 : Symbol(t02c01, Decl(genericDefaults.ts, 469, 5))
2187-
>(<t02<1>>x).a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2188-
>t02 : Symbol(t02, Decl(genericDefaults.ts, 465, 42))
2222+
>t02c01 : Symbol(t02c01, Decl(genericDefaults.ts, 478, 5))
2223+
>(<t02<1>>x).a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
2224+
>t02 : Symbol(t02, Decl(genericDefaults.ts, 474, 42))
21892225
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2190-
>a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2226+
>a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
21912227

21922228
const t02c02 = (<t02<number, number>>x).a;
2193-
>t02c02 : Symbol(t02c02, Decl(genericDefaults.ts, 470, 5))
2194-
>(<t02<number, number>>x).a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2195-
>t02 : Symbol(t02, Decl(genericDefaults.ts, 465, 42))
2229+
>t02c02 : Symbol(t02c02, Decl(genericDefaults.ts, 479, 5))
2230+
>(<t02<number, number>>x).a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
2231+
>t02 : Symbol(t02, Decl(genericDefaults.ts, 474, 42))
21962232
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2197-
>a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2233+
>a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
21982234

21992235
const t02c03 = (<t02<1, number>>x).a;
2200-
>t02c03 : Symbol(t02c03, Decl(genericDefaults.ts, 471, 5))
2201-
>(<t02<1, number>>x).a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2202-
>t02 : Symbol(t02, Decl(genericDefaults.ts, 465, 42))
2236+
>t02c03 : Symbol(t02c03, Decl(genericDefaults.ts, 480, 5))
2237+
>(<t02<1, number>>x).a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
2238+
>t02 : Symbol(t02, Decl(genericDefaults.ts, 474, 42))
22032239
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2204-
>a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2240+
>a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
22052241

22062242
const t02c04 = (<t02<number, 1>>x).a;
2207-
>t02c04 : Symbol(t02c04, Decl(genericDefaults.ts, 472, 5))
2208-
>(<t02<number, 1>>x).a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2209-
>t02 : Symbol(t02, Decl(genericDefaults.ts, 465, 42))
2243+
>t02c04 : Symbol(t02c04, Decl(genericDefaults.ts, 481, 5))
2244+
>(<t02<number, 1>>x).a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
2245+
>t02 : Symbol(t02, Decl(genericDefaults.ts, 474, 42))
22102246
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2211-
>a : Symbol(a, Decl(genericDefaults.ts, 467, 37))
2247+
>a : Symbol(a, Decl(genericDefaults.ts, 476, 37))
22122248

22132249
type t03<T extends number, U extends T = T> = { a: [T, U]; }
2214-
>t03 : Symbol(t03, Decl(genericDefaults.ts, 472, 37))
2215-
>T : Symbol(T, Decl(genericDefaults.ts, 474, 9))
2216-
>U : Symbol(U, Decl(genericDefaults.ts, 474, 26))
2217-
>T : Symbol(T, Decl(genericDefaults.ts, 474, 9))
2218-
>T : Symbol(T, Decl(genericDefaults.ts, 474, 9))
2219-
>a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2220-
>T : Symbol(T, Decl(genericDefaults.ts, 474, 9))
2221-
>U : Symbol(U, Decl(genericDefaults.ts, 474, 26))
2250+
>t03 : Symbol(t03, Decl(genericDefaults.ts, 481, 37))
2251+
>T : Symbol(T, Decl(genericDefaults.ts, 483, 9))
2252+
>U : Symbol(U, Decl(genericDefaults.ts, 483, 26))
2253+
>T : Symbol(T, Decl(genericDefaults.ts, 483, 9))
2254+
>T : Symbol(T, Decl(genericDefaults.ts, 483, 9))
2255+
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
2256+
>T : Symbol(T, Decl(genericDefaults.ts, 483, 9))
2257+
>U : Symbol(U, Decl(genericDefaults.ts, 483, 26))
22222258

22232259
const t03c00 = (<t03<number>>x).a;
2224-
>t03c00 : Symbol(t03c00, Decl(genericDefaults.ts, 475, 5))
2225-
>(<t03<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2226-
>t03 : Symbol(t03, Decl(genericDefaults.ts, 472, 37))
2260+
>t03c00 : Symbol(t03c00, Decl(genericDefaults.ts, 484, 5))
2261+
>(<t03<number>>x).a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
2262+
>t03 : Symbol(t03, Decl(genericDefaults.ts, 481, 37))
22272263
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2228-
>a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2264+
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
22292265

22302266
const t03c01 = (<t03<1>>x).a;
2231-
>t03c01 : Symbol(t03c01, Decl(genericDefaults.ts, 476, 5))
2232-
>(<t03<1>>x).a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2233-
>t03 : Symbol(t03, Decl(genericDefaults.ts, 472, 37))
2267+
>t03c01 : Symbol(t03c01, Decl(genericDefaults.ts, 485, 5))
2268+
>(<t03<1>>x).a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
2269+
>t03 : Symbol(t03, Decl(genericDefaults.ts, 481, 37))
22342270
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2235-
>a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2271+
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
22362272

22372273
const t03c02 = (<t03<number, number>>x).a;
2238-
>t03c02 : Symbol(t03c02, Decl(genericDefaults.ts, 477, 5))
2239-
>(<t03<number, number>>x).a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2240-
>t03 : Symbol(t03, Decl(genericDefaults.ts, 472, 37))
2274+
>t03c02 : Symbol(t03c02, Decl(genericDefaults.ts, 486, 5))
2275+
>(<t03<number, number>>x).a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
2276+
>t03 : Symbol(t03, Decl(genericDefaults.ts, 481, 37))
22412277
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2242-
>a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2278+
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
22432279

22442280
const t03c03 = (<t03<1, 1>>x).a;
2245-
>t03c03 : Symbol(t03c03, Decl(genericDefaults.ts, 478, 5))
2246-
>(<t03<1, 1>>x).a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2247-
>t03 : Symbol(t03, Decl(genericDefaults.ts, 472, 37))
2281+
>t03c03 : Symbol(t03c03, Decl(genericDefaults.ts, 487, 5))
2282+
>(<t03<1, 1>>x).a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
2283+
>t03 : Symbol(t03, Decl(genericDefaults.ts, 481, 37))
22482284
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2249-
>a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2285+
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
22502286

22512287
const t03c04 = (<t03<number, 1>>x).a;
2252-
>t03c04 : Symbol(t03c04, Decl(genericDefaults.ts, 479, 5))
2253-
>(<t03<number, 1>>x).a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2254-
>t03 : Symbol(t03, Decl(genericDefaults.ts, 472, 37))
2288+
>t03c04 : Symbol(t03c04, Decl(genericDefaults.ts, 488, 5))
2289+
>(<t03<number, 1>>x).a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
2290+
>t03 : Symbol(t03, Decl(genericDefaults.ts, 481, 37))
22552291
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
2256-
>a : Symbol(a, Decl(genericDefaults.ts, 474, 47))
2292+
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
22572293

tests/baselines/reference/genericDefaults.types

+37
Original file line numberDiff line numberDiff line change
@@ -2446,6 +2446,43 @@ const Derived02c03 = new Derived02<number>(1);
24462446
>Derived02 : typeof Derived02
24472447
>1 : 1
24482448

2449+
// https://github.com/Microsoft/TypeScript/issues/16211
2450+
interface Base02 {}
2451+
>Base02 : Base02
2452+
2453+
interface Base02Constructor { new <T = A>(a: T): Base02 & T; }
2454+
>Base02Constructor : Base02Constructor
2455+
>T : T
2456+
>A : A
2457+
>a : T
2458+
>T : T
2459+
>Base02 : Base02
2460+
>T : T
2461+
2462+
declare const Base02: Base02Constructor;
2463+
>Base02 : Base02Constructor
2464+
>Base02Constructor : Base02Constructor
2465+
2466+
declare class Derived03 extends Base02 {}
2467+
>Derived03 : Derived03
2468+
>Base02 : Base02 & A
2469+
2470+
const Derived03c00 = new Derived03(ab);
2471+
>Derived03c00 : Derived03
2472+
>new Derived03(ab) : Derived03
2473+
>Derived03 : typeof Derived03
2474+
>ab : AB
2475+
2476+
const Derived03c01 = Derived03c00.a;
2477+
>Derived03c01 : number
2478+
>Derived03c00.a : number
2479+
>Derived03c00 : Derived03
2480+
>a : number
2481+
2482+
type DerivedProps = keyof Derived03;
2483+
>DerivedProps : "a"
2484+
>Derived03 : Derived03
2485+
24492486
type t00<T = number> = { a: T; }
24502487
>t00 : t00<T>
24512488
>T : T

0 commit comments

Comments
 (0)