Accept new baselines

This commit is contained in:
Anders Hejlsberg
2018-11-02 08:20:13 -07:00
parent 48c0aedf54
commit 00c5071be6
3 changed files with 297 additions and 0 deletions
@@ -0,0 +1,61 @@
//// [genericObjectRest.ts]
const a = 'a';
function f1<T extends { a: string, b: number }>(obj: T) {
let { ...r0 } = obj;
let { a: a1, ...r1 } = obj;
let { a: a2, b: b2, ...r2 } = obj;
let { 'a': a3, ...r3 } = obj;
let { ['a']: a4, ...r4 } = obj;
let { [a]: a5, ...r5 } = obj;
}
const sa = Symbol();
const sb = Symbol();
function f2<T extends { [sa]: string, [sb]: number }>(obj: T) {
let { [sa]: a1, [sb]: b1, ...r1 } = obj;
}
function f3<T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) {
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
}
type Item = { a: string, b: number, c: boolean };
function f4<K1 extends keyof Item, K2 extends keyof Item>(obj: Item, k1: K1, k2: K2) {
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
}
//// [genericObjectRest.js]
"use strict";
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
const a = 'a';
function f1(obj) {
let r0 = __rest(obj, []);
let { a: a1 } = obj, r1 = __rest(obj, ["a"]);
let { a: a2, b: b2 } = obj, r2 = __rest(obj, ["a", "b"]);
let { 'a': a3 } = obj, r3 = __rest(obj, ['a']);
let { ['a']: a4 } = obj, r4 = __rest(obj, ['a']);
let _a = a, a5 = obj[_a], r5 = __rest(obj, [typeof _a === "symbol" ? _a : _a + ""]);
}
const sa = Symbol();
const sb = Symbol();
function f2(obj) {
let _a = sa, a1 = obj[_a], _b = sb, b1 = obj[_b], r1 = __rest(obj, [typeof _a === "symbol" ? _a : _a + "", typeof _b === "symbol" ? _b : _b + ""]);
}
function f3(obj, k1, k2) {
let _a = k1, a1 = obj[_a], _b = k2, a2 = obj[_b], r1 = __rest(obj, [typeof _a === "symbol" ? _a : _a + "", typeof _b === "symbol" ? _b : _b + ""]);
}
function f4(obj, k1, k2) {
let _a = k1, a1 = obj[_a], _b = k2, a2 = obj[_b], r1 = __rest(obj, [typeof _a === "symbol" ? _a : _a + "", typeof _b === "symbol" ? _b : _b + ""]);
}
@@ -0,0 +1,126 @@
=== tests/cases/conformance/types/rest/genericObjectRest.ts ===
const a = 'a';
>a : Symbol(a, Decl(genericObjectRest.ts, 0, 5))
function f1<T extends { a: string, b: number }>(obj: T) {
>f1 : Symbol(f1, Decl(genericObjectRest.ts, 0, 14))
>T : Symbol(T, Decl(genericObjectRest.ts, 2, 12))
>a : Symbol(a, Decl(genericObjectRest.ts, 2, 23))
>b : Symbol(b, Decl(genericObjectRest.ts, 2, 34))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
>T : Symbol(T, Decl(genericObjectRest.ts, 2, 12))
let { ...r0 } = obj;
>r0 : Symbol(r0, Decl(genericObjectRest.ts, 3, 9))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
let { a: a1, ...r1 } = obj;
>a : Symbol(a, Decl(genericObjectRest.ts, 2, 23))
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 4, 9))
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 4, 16))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
let { a: a2, b: b2, ...r2 } = obj;
>a : Symbol(a, Decl(genericObjectRest.ts, 2, 23))
>a2 : Symbol(a2, Decl(genericObjectRest.ts, 5, 9))
>b : Symbol(b, Decl(genericObjectRest.ts, 2, 34))
>b2 : Symbol(b2, Decl(genericObjectRest.ts, 5, 16))
>r2 : Symbol(r2, Decl(genericObjectRest.ts, 5, 23))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
let { 'a': a3, ...r3 } = obj;
>a3 : Symbol(a3, Decl(genericObjectRest.ts, 6, 9))
>r3 : Symbol(r3, Decl(genericObjectRest.ts, 6, 18))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
let { ['a']: a4, ...r4 } = obj;
>'a' : Symbol(a4, Decl(genericObjectRest.ts, 7, 9))
>a4 : Symbol(a4, Decl(genericObjectRest.ts, 7, 9))
>r4 : Symbol(r4, Decl(genericObjectRest.ts, 7, 20))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
let { [a]: a5, ...r5 } = obj;
>a : Symbol(a, Decl(genericObjectRest.ts, 0, 5))
>a5 : Symbol(a5, Decl(genericObjectRest.ts, 8, 9))
>r5 : Symbol(r5, Decl(genericObjectRest.ts, 8, 18))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 2, 48))
}
const sa = Symbol();
>sa : Symbol(sa, Decl(genericObjectRest.ts, 11, 5))
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
const sb = Symbol();
>sb : Symbol(sb, Decl(genericObjectRest.ts, 12, 5))
>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
function f2<T extends { [sa]: string, [sb]: number }>(obj: T) {
>f2 : Symbol(f2, Decl(genericObjectRest.ts, 12, 20))
>T : Symbol(T, Decl(genericObjectRest.ts, 14, 12))
>[sa] : Symbol([sa], Decl(genericObjectRest.ts, 14, 23))
>sa : Symbol(sa, Decl(genericObjectRest.ts, 11, 5))
>[sb] : Symbol([sb], Decl(genericObjectRest.ts, 14, 37))
>sb : Symbol(sb, Decl(genericObjectRest.ts, 12, 5))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 14, 54))
>T : Symbol(T, Decl(genericObjectRest.ts, 14, 12))
let { [sa]: a1, [sb]: b1, ...r1 } = obj;
>sa : Symbol(sa, Decl(genericObjectRest.ts, 11, 5))
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 15, 9))
>sb : Symbol(sb, Decl(genericObjectRest.ts, 12, 5))
>b1 : Symbol(b1, Decl(genericObjectRest.ts, 15, 19))
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 15, 29))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 14, 54))
}
function f3<T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) {
>f3 : Symbol(f3, Decl(genericObjectRest.ts, 16, 1))
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 18, 14))
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 18, 34))
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 18, 55))
>T : Symbol(T, Decl(genericObjectRest.ts, 18, 12))
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 18, 62))
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 18, 14))
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 18, 70))
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 18, 34))
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 18, 62))
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 19, 9))
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 18, 70))
>a2 : Symbol(a2, Decl(genericObjectRest.ts, 19, 19))
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 19, 29))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 18, 55))
}
type Item = { a: string, b: number, c: boolean };
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
>a : Symbol(a, Decl(genericObjectRest.ts, 22, 13))
>b : Symbol(b, Decl(genericObjectRest.ts, 22, 24))
>c : Symbol(c, Decl(genericObjectRest.ts, 22, 35))
function f4<K1 extends keyof Item, K2 extends keyof Item>(obj: Item, k1: K1, k2: K2) {
>f4 : Symbol(f4, Decl(genericObjectRest.ts, 22, 49))
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 24, 12))
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 24, 34))
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 24, 58))
>Item : Symbol(Item, Decl(genericObjectRest.ts, 20, 1))
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 24, 68))
>K1 : Symbol(K1, Decl(genericObjectRest.ts, 24, 12))
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 24, 76))
>K2 : Symbol(K2, Decl(genericObjectRest.ts, 24, 34))
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
>k1 : Symbol(k1, Decl(genericObjectRest.ts, 24, 68))
>a1 : Symbol(a1, Decl(genericObjectRest.ts, 25, 9))
>k2 : Symbol(k2, Decl(genericObjectRest.ts, 24, 76))
>a2 : Symbol(a2, Decl(genericObjectRest.ts, 25, 19))
>r1 : Symbol(r1, Decl(genericObjectRest.ts, 25, 29))
>obj : Symbol(obj, Decl(genericObjectRest.ts, 24, 58))
}
@@ -0,0 +1,110 @@
=== tests/cases/conformance/types/rest/genericObjectRest.ts ===
const a = 'a';
>a : "a"
>'a' : "a"
function f1<T extends { a: string, b: number }>(obj: T) {
>f1 : <T extends { a: string; b: number; }>(obj: T) => void
>a : string
>b : number
>obj : T
let { ...r0 } = obj;
>r0 : T
>obj : T
let { a: a1, ...r1 } = obj;
>a : any
>a1 : string
>r1 : Pick<T, Exclude<keyof T, "a">>
>obj : T
let { a: a2, b: b2, ...r2 } = obj;
>a : any
>a2 : string
>b : any
>b2 : number
>r2 : Pick<T, Exclude<keyof T, "a" | "b">>
>obj : T
let { 'a': a3, ...r3 } = obj;
>a3 : string
>r3 : Pick<T, Exclude<keyof T, "a">>
>obj : T
let { ['a']: a4, ...r4 } = obj;
>'a' : "a"
>a4 : string
>r4 : Pick<T, Exclude<keyof T, "a">>
>obj : T
let { [a]: a5, ...r5 } = obj;
>a : "a"
>a5 : string
>r5 : Pick<T, Exclude<keyof T, "a">>
>obj : T
}
const sa = Symbol();
>sa : unique symbol
>Symbol() : unique symbol
>Symbol : SymbolConstructor
const sb = Symbol();
>sb : unique symbol
>Symbol() : unique symbol
>Symbol : SymbolConstructor
function f2<T extends { [sa]: string, [sb]: number }>(obj: T) {
>f2 : <T extends { [sa]: string; [sb]: number; }>(obj: T) => void
>[sa] : string
>sa : unique symbol
>[sb] : number
>sb : unique symbol
>obj : T
let { [sa]: a1, [sb]: b1, ...r1 } = obj;
>sa : unique symbol
>a1 : string
>sb : unique symbol
>b1 : number
>r1 : Pick<T, Exclude<keyof T, unique symbol | unique symbol>>
>obj : T
}
function f3<T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) {
>f3 : <T, K1 extends keyof T, K2 extends keyof T>(obj: T, k1: K1, k2: K2) => void
>obj : T
>k1 : K1
>k2 : K2
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
>k1 : K1
>a1 : T[K1]
>k2 : K2
>a2 : T[K2]
>r1 : Pick<T, Exclude<keyof T, K1 | K2>>
>obj : T
}
type Item = { a: string, b: number, c: boolean };
>Item : Item
>a : string
>b : number
>c : boolean
function f4<K1 extends keyof Item, K2 extends keyof Item>(obj: Item, k1: K1, k2: K2) {
>f4 : <K1 extends "a" | "b" | "c", K2 extends "a" | "b" | "c">(obj: Item, k1: K1, k2: K2) => void
>obj : Item
>k1 : K1
>k2 : K2
let { [k1]: a1, [k2]: a2, ...r1 } = obj;
>k1 : K1
>a1 : Item[K1]
>k2 : K2
>a2 : Item[K2]
>r1 : Pick<Item, Exclude<"a", K1 | K2> | Exclude<"b", K1 | K2> | Exclude<"c", K1 | K2>>
>obj : Item
}