Add regression test cases and rename test
This commit is contained in:
parent
011f712d98
commit
aed386c796
8 changed files with 248 additions and 69 deletions
|
@ -1,19 +0,0 @@
|
||||||
//// [typeParamExtendsNumber.ts]
|
|
||||||
function f<T extends number>() {
|
|
||||||
var t: T;
|
|
||||||
var v = {
|
|
||||||
[t]: 0
|
|
||||||
}
|
|
||||||
return t + t;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//// [typeParamExtendsNumber.js]
|
|
||||||
function f() {
|
|
||||||
var t;
|
|
||||||
var v = (_a = {},
|
|
||||||
_a[t] = 0,
|
|
||||||
_a);
|
|
||||||
return t + t;
|
|
||||||
var _a;
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
=== tests/cases/compiler/typeParamExtendsNumber.ts ===
|
|
||||||
function f<T extends number>() {
|
|
||||||
>f : Symbol(f, Decl(typeParamExtendsNumber.ts, 0, 0))
|
|
||||||
>T : Symbol(T, Decl(typeParamExtendsNumber.ts, 0, 11))
|
|
||||||
|
|
||||||
var t: T;
|
|
||||||
>t : Symbol(t, Decl(typeParamExtendsNumber.ts, 1, 7))
|
|
||||||
>T : Symbol(T, Decl(typeParamExtendsNumber.ts, 0, 11))
|
|
||||||
|
|
||||||
var v = {
|
|
||||||
>v : Symbol(v, Decl(typeParamExtendsNumber.ts, 2, 7))
|
|
||||||
|
|
||||||
[t]: 0
|
|
||||||
>t : Symbol(t, Decl(typeParamExtendsNumber.ts, 1, 7))
|
|
||||||
}
|
|
||||||
return t + t;
|
|
||||||
>t : Symbol(t, Decl(typeParamExtendsNumber.ts, 1, 7))
|
|
||||||
>t : Symbol(t, Decl(typeParamExtendsNumber.ts, 1, 7))
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
=== tests/cases/compiler/typeParamExtendsNumber.ts ===
|
|
||||||
function f<T extends number>() {
|
|
||||||
>f : <T extends number>() => number
|
|
||||||
>T : T
|
|
||||||
|
|
||||||
var t: T;
|
|
||||||
>t : T
|
|
||||||
>T : T
|
|
||||||
|
|
||||||
var v = {
|
|
||||||
>v : { [x: number]: number; }
|
|
||||||
>{ [t]: 0 } : { [x: number]: number; }
|
|
||||||
|
|
||||||
[t]: 0
|
|
||||||
>t : T
|
|
||||||
>0 : 0
|
|
||||||
}
|
|
||||||
return t + t;
|
|
||||||
>t + t : number
|
|
||||||
>t : T
|
|
||||||
>t : T
|
|
||||||
}
|
|
||||||
|
|
51
tests/baselines/reference/typeParameterExtendsPrimitive.js
Normal file
51
tests/baselines/reference/typeParameterExtendsPrimitive.js
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
//// [typeParameterExtendsPrimitive.ts]
|
||||||
|
// #14473
|
||||||
|
function f<T extends number>() {
|
||||||
|
var t: T;
|
||||||
|
var v = {
|
||||||
|
[t]: 0
|
||||||
|
}
|
||||||
|
return t + t;
|
||||||
|
}
|
||||||
|
|
||||||
|
// #15501
|
||||||
|
interface I { x: number }
|
||||||
|
type IdMap<T> = { [P in keyof T]: T[P] };
|
||||||
|
function g<T extends I>(i: IdMap<T>) {
|
||||||
|
const n: number = i.x;
|
||||||
|
return i.x * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// #17069
|
||||||
|
function h<T extends Record<K, number>, K extends string>(array: T[], prop: K): number {
|
||||||
|
let result = 0;
|
||||||
|
for (const v of array) {
|
||||||
|
result += v[prop];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//// [typeParameterExtendsPrimitive.js]
|
||||||
|
// #14473
|
||||||
|
function f() {
|
||||||
|
var t;
|
||||||
|
var v = (_a = {},
|
||||||
|
_a[t] = 0,
|
||||||
|
_a);
|
||||||
|
return t + t;
|
||||||
|
var _a;
|
||||||
|
}
|
||||||
|
function g(i) {
|
||||||
|
var n = i.x;
|
||||||
|
return i.x * 2;
|
||||||
|
}
|
||||||
|
// #17069
|
||||||
|
function h(array, prop) {
|
||||||
|
var result = 0;
|
||||||
|
for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
|
||||||
|
var v = array_1[_i];
|
||||||
|
result += v[prop];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
=== tests/cases/compiler/typeParameterExtendsPrimitive.ts ===
|
||||||
|
// #14473
|
||||||
|
function f<T extends number>() {
|
||||||
|
>f : Symbol(f, Decl(typeParameterExtendsPrimitive.ts, 0, 0))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 1, 11))
|
||||||
|
|
||||||
|
var t: T;
|
||||||
|
>t : Symbol(t, Decl(typeParameterExtendsPrimitive.ts, 2, 7))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 1, 11))
|
||||||
|
|
||||||
|
var v = {
|
||||||
|
>v : Symbol(v, Decl(typeParameterExtendsPrimitive.ts, 3, 7))
|
||||||
|
|
||||||
|
[t]: 0
|
||||||
|
>t : Symbol(t, Decl(typeParameterExtendsPrimitive.ts, 2, 7))
|
||||||
|
}
|
||||||
|
return t + t;
|
||||||
|
>t : Symbol(t, Decl(typeParameterExtendsPrimitive.ts, 2, 7))
|
||||||
|
>t : Symbol(t, Decl(typeParameterExtendsPrimitive.ts, 2, 7))
|
||||||
|
}
|
||||||
|
|
||||||
|
// #15501
|
||||||
|
interface I { x: number }
|
||||||
|
>I : Symbol(I, Decl(typeParameterExtendsPrimitive.ts, 7, 1))
|
||||||
|
>x : Symbol(I.x, Decl(typeParameterExtendsPrimitive.ts, 10, 13))
|
||||||
|
|
||||||
|
type IdMap<T> = { [P in keyof T]: T[P] };
|
||||||
|
>IdMap : Symbol(IdMap, Decl(typeParameterExtendsPrimitive.ts, 10, 25))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 11, 11))
|
||||||
|
>P : Symbol(P, Decl(typeParameterExtendsPrimitive.ts, 11, 19))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 11, 11))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 11, 11))
|
||||||
|
>P : Symbol(P, Decl(typeParameterExtendsPrimitive.ts, 11, 19))
|
||||||
|
|
||||||
|
function g<T extends I>(i: IdMap<T>) {
|
||||||
|
>g : Symbol(g, Decl(typeParameterExtendsPrimitive.ts, 11, 41))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 12, 11))
|
||||||
|
>I : Symbol(I, Decl(typeParameterExtendsPrimitive.ts, 7, 1))
|
||||||
|
>i : Symbol(i, Decl(typeParameterExtendsPrimitive.ts, 12, 24))
|
||||||
|
>IdMap : Symbol(IdMap, Decl(typeParameterExtendsPrimitive.ts, 10, 25))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 12, 11))
|
||||||
|
|
||||||
|
const n: number = i.x;
|
||||||
|
>n : Symbol(n, Decl(typeParameterExtendsPrimitive.ts, 13, 9))
|
||||||
|
>i.x : Symbol(x, Decl(typeParameterExtendsPrimitive.ts, 10, 13))
|
||||||
|
>i : Symbol(i, Decl(typeParameterExtendsPrimitive.ts, 12, 24))
|
||||||
|
>x : Symbol(x, Decl(typeParameterExtendsPrimitive.ts, 10, 13))
|
||||||
|
|
||||||
|
return i.x * 2;
|
||||||
|
>i.x : Symbol(x, Decl(typeParameterExtendsPrimitive.ts, 10, 13))
|
||||||
|
>i : Symbol(i, Decl(typeParameterExtendsPrimitive.ts, 12, 24))
|
||||||
|
>x : Symbol(x, Decl(typeParameterExtendsPrimitive.ts, 10, 13))
|
||||||
|
}
|
||||||
|
|
||||||
|
// #17069
|
||||||
|
function h<T extends Record<K, number>, K extends string>(array: T[], prop: K): number {
|
||||||
|
>h : Symbol(h, Decl(typeParameterExtendsPrimitive.ts, 15, 1))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 18, 11))
|
||||||
|
>Record : Symbol(Record, Decl(lib.d.ts, --, --))
|
||||||
|
>K : Symbol(K, Decl(typeParameterExtendsPrimitive.ts, 18, 39))
|
||||||
|
>K : Symbol(K, Decl(typeParameterExtendsPrimitive.ts, 18, 39))
|
||||||
|
>array : Symbol(array, Decl(typeParameterExtendsPrimitive.ts, 18, 58))
|
||||||
|
>T : Symbol(T, Decl(typeParameterExtendsPrimitive.ts, 18, 11))
|
||||||
|
>prop : Symbol(prop, Decl(typeParameterExtendsPrimitive.ts, 18, 69))
|
||||||
|
>K : Symbol(K, Decl(typeParameterExtendsPrimitive.ts, 18, 39))
|
||||||
|
|
||||||
|
let result = 0;
|
||||||
|
>result : Symbol(result, Decl(typeParameterExtendsPrimitive.ts, 19, 7))
|
||||||
|
|
||||||
|
for (const v of array) {
|
||||||
|
>v : Symbol(v, Decl(typeParameterExtendsPrimitive.ts, 20, 14))
|
||||||
|
>array : Symbol(array, Decl(typeParameterExtendsPrimitive.ts, 18, 58))
|
||||||
|
|
||||||
|
result += v[prop];
|
||||||
|
>result : Symbol(result, Decl(typeParameterExtendsPrimitive.ts, 19, 7))
|
||||||
|
>v : Symbol(v, Decl(typeParameterExtendsPrimitive.ts, 20, 14))
|
||||||
|
>prop : Symbol(prop, Decl(typeParameterExtendsPrimitive.ts, 18, 69))
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
>result : Symbol(result, Decl(typeParameterExtendsPrimitive.ts, 19, 7))
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
=== tests/cases/compiler/typeParameterExtendsPrimitive.ts ===
|
||||||
|
// #14473
|
||||||
|
function f<T extends number>() {
|
||||||
|
>f : <T extends number>() => number
|
||||||
|
>T : T
|
||||||
|
|
||||||
|
var t: T;
|
||||||
|
>t : T
|
||||||
|
>T : T
|
||||||
|
|
||||||
|
var v = {
|
||||||
|
>v : { [x: number]: number; }
|
||||||
|
>{ [t]: 0 } : { [x: number]: number; }
|
||||||
|
|
||||||
|
[t]: 0
|
||||||
|
>t : T
|
||||||
|
>0 : 0
|
||||||
|
}
|
||||||
|
return t + t;
|
||||||
|
>t + t : number
|
||||||
|
>t : T
|
||||||
|
>t : T
|
||||||
|
}
|
||||||
|
|
||||||
|
// #15501
|
||||||
|
interface I { x: number }
|
||||||
|
>I : I
|
||||||
|
>x : number
|
||||||
|
|
||||||
|
type IdMap<T> = { [P in keyof T]: T[P] };
|
||||||
|
>IdMap : IdMap<T>
|
||||||
|
>T : T
|
||||||
|
>P : P
|
||||||
|
>T : T
|
||||||
|
>T : T
|
||||||
|
>P : P
|
||||||
|
|
||||||
|
function g<T extends I>(i: IdMap<T>) {
|
||||||
|
>g : <T extends I>(i: IdMap<T>) => number
|
||||||
|
>T : T
|
||||||
|
>I : I
|
||||||
|
>i : IdMap<T>
|
||||||
|
>IdMap : IdMap<T>
|
||||||
|
>T : T
|
||||||
|
|
||||||
|
const n: number = i.x;
|
||||||
|
>n : number
|
||||||
|
>i.x : T["x"]
|
||||||
|
>i : IdMap<T>
|
||||||
|
>x : T["x"]
|
||||||
|
|
||||||
|
return i.x * 2;
|
||||||
|
>i.x * 2 : number
|
||||||
|
>i.x : T["x"]
|
||||||
|
>i : IdMap<T>
|
||||||
|
>x : T["x"]
|
||||||
|
>2 : 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// #17069
|
||||||
|
function h<T extends Record<K, number>, K extends string>(array: T[], prop: K): number {
|
||||||
|
>h : <T extends Record<K, number>, K extends string>(array: T[], prop: K) => number
|
||||||
|
>T : T
|
||||||
|
>Record : Record<K, T>
|
||||||
|
>K : K
|
||||||
|
>K : K
|
||||||
|
>array : T[]
|
||||||
|
>T : T
|
||||||
|
>prop : K
|
||||||
|
>K : K
|
||||||
|
|
||||||
|
let result = 0;
|
||||||
|
>result : number
|
||||||
|
>0 : 0
|
||||||
|
|
||||||
|
for (const v of array) {
|
||||||
|
>v : T
|
||||||
|
>array : T[]
|
||||||
|
|
||||||
|
result += v[prop];
|
||||||
|
>result += v[prop] : number
|
||||||
|
>result : number
|
||||||
|
>v[prop] : T[K]
|
||||||
|
>v : T
|
||||||
|
>prop : K
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
>result : number
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
function f<T extends number>() {
|
|
||||||
var t: T;
|
|
||||||
var v = {
|
|
||||||
[t]: 0
|
|
||||||
}
|
|
||||||
return t + t;
|
|
||||||
}
|
|
25
tests/cases/compiler/typeParameterExtendsPrimitive.ts
Normal file
25
tests/cases/compiler/typeParameterExtendsPrimitive.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
// #14473
|
||||||
|
function f<T extends number>() {
|
||||||
|
var t: T;
|
||||||
|
var v = {
|
||||||
|
[t]: 0
|
||||||
|
}
|
||||||
|
return t + t;
|
||||||
|
}
|
||||||
|
|
||||||
|
// #15501
|
||||||
|
interface I { x: number }
|
||||||
|
type IdMap<T> = { [P in keyof T]: T[P] };
|
||||||
|
function g<T extends I>(i: IdMap<T>) {
|
||||||
|
const n: number = i.x;
|
||||||
|
return i.x * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// #17069
|
||||||
|
function h<T extends Record<K, number>, K extends string>(array: T[], prop: K): number {
|
||||||
|
let result = 0;
|
||||||
|
for (const v of array) {
|
||||||
|
result += v[prop];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
Loading…
Reference in a new issue