Accept new baselines

This commit is contained in:
Anders Hejlsberg 2019-02-06 15:41:51 -08:00
parent 62c62f4f87
commit 262e3c1ae2
3 changed files with 229 additions and 1 deletions

View file

@ -149,7 +149,31 @@ var g2 = applySpec({ foo: { bar: { baz: (x: any) => true } } });
const foo = <T>(object: T, partial: Partial<T>) => object;
let o = {a: 5, b: 7};
foo(o, {b: 9});
o = foo(o, {b: 9});
o = foo(o, {b: 9});
// Inferring to { [P in K]: X }, where K extends keyof T, produces same inferences as
// inferring to { [P in keyof T]: X }.
declare function f20<T, K extends keyof T>(obj: Pick<T, K>): T;
declare function f21<T, K extends keyof T>(obj: Pick<T, K>): K;
declare function f22<T, K extends keyof T>(obj: Boxified<Pick<T, K>>): T;
let x0 = f20({ foo: 42, bar: "hello" });
let x1 = f21({ foo: 42, bar: "hello" });
let x2 = f22({ foo: { value: 42} , bar: { value: "hello" } });
// Repro from #29765
function getProps<T, K extends keyof T>(obj: T, list: K[]): Pick<T, K> {
return {} as any;
}
const myAny: any = {};
const o1 = getProps(myAny, ['foo', 'bar']);
const o2: { foo: any; bar: any } = getProps(myAny, ['foo', 'bar']);
//// [isomorphicMappedTypeInference.js]
function box(x) {
@ -255,6 +279,16 @@ var foo = function (object, partial) { return object; };
var o = { a: 5, b: 7 };
foo(o, { b: 9 });
o = foo(o, { b: 9 });
var x0 = f20({ foo: 42, bar: "hello" });
var x1 = f21({ foo: 42, bar: "hello" });
var x2 = f22({ foo: { value: 42 }, bar: { value: "hello" } });
// Repro from #29765
function getProps(obj, list) {
return {};
}
var myAny = {};
var o1 = getProps(myAny, ['foo', 'bar']);
var o2 = getProps(myAny, ['foo', 'bar']);
//// [isomorphicMappedTypeInference.d.ts]
@ -323,3 +357,22 @@ declare let o: {
a: number;
b: number;
};
declare function f20<T, K extends keyof T>(obj: Pick<T, K>): T;
declare function f21<T, K extends keyof T>(obj: Pick<T, K>): K;
declare function f22<T, K extends keyof T>(obj: Boxified<Pick<T, K>>): T;
declare let x0: {
foo: number;
bar: string;
};
declare let x1: "foo" | "bar";
declare let x2: {
foo: number;
bar: string;
};
declare function getProps<T, K extends keyof T>(obj: T, list: K[]): Pick<T, K>;
declare const myAny: any;
declare const o1: Pick<any, "foo" | "bar">;
declare const o2: {
foo: any;
bar: any;
};

View file

@ -486,3 +486,93 @@ o = foo(o, {b: 9});
>o : Symbol(o, Decl(isomorphicMappedTypeInference.ts, 148, 3))
>b : Symbol(b, Decl(isomorphicMappedTypeInference.ts, 150, 12))
// Inferring to { [P in K]: X }, where K extends keyof T, produces same inferences as
// inferring to { [P in keyof T]: X }.
declare function f20<T, K extends keyof T>(obj: Pick<T, K>): T;
>f20 : Symbol(f20, Decl(isomorphicMappedTypeInference.ts, 150, 19))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 155, 23))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
>obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 155, 43))
>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 155, 23))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
declare function f21<T, K extends keyof T>(obj: Pick<T, K>): K;
>f21 : Symbol(f21, Decl(isomorphicMappedTypeInference.ts, 155, 63))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 156, 21))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 156, 23))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 156, 21))
>obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 156, 43))
>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 156, 21))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 156, 23))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 156, 23))
declare function f22<T, K extends keyof T>(obj: Boxified<Pick<T, K>>): T;
>f22 : Symbol(f22, Decl(isomorphicMappedTypeInference.ts, 156, 63))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 157, 23))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
>obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 157, 43))
>Boxified : Symbol(Boxified, Decl(isomorphicMappedTypeInference.ts, 2, 1))
>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 157, 23))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
let x0 = f20({ foo: 42, bar: "hello" });
>x0 : Symbol(x0, Decl(isomorphicMappedTypeInference.ts, 159, 3))
>f20 : Symbol(f20, Decl(isomorphicMappedTypeInference.ts, 150, 19))
>foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 159, 14))
>bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 159, 23))
let x1 = f21({ foo: 42, bar: "hello" });
>x1 : Symbol(x1, Decl(isomorphicMappedTypeInference.ts, 160, 3))
>f21 : Symbol(f21, Decl(isomorphicMappedTypeInference.ts, 155, 63))
>foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 160, 14))
>bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 160, 23))
let x2 = f22({ foo: { value: 42} , bar: { value: "hello" } });
>x2 : Symbol(x2, Decl(isomorphicMappedTypeInference.ts, 161, 3))
>f22 : Symbol(f22, Decl(isomorphicMappedTypeInference.ts, 156, 63))
>foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 161, 14))
>value : Symbol(value, Decl(isomorphicMappedTypeInference.ts, 161, 21))
>bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 161, 34))
>value : Symbol(value, Decl(isomorphicMappedTypeInference.ts, 161, 41))
// Repro from #29765
function getProps<T, K extends keyof T>(obj: T, list: K[]): Pick<T, K> {
>getProps : Symbol(getProps, Decl(isomorphicMappedTypeInference.ts, 161, 62))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 165, 18))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 165, 20))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 165, 18))
>obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 165, 40))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 165, 18))
>list : Symbol(list, Decl(isomorphicMappedTypeInference.ts, 165, 47))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 165, 20))
>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
>T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 165, 18))
>K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 165, 20))
return {} as any;
}
const myAny: any = {};
>myAny : Symbol(myAny, Decl(isomorphicMappedTypeInference.ts, 169, 5))
const o1 = getProps(myAny, ['foo', 'bar']);
>o1 : Symbol(o1, Decl(isomorphicMappedTypeInference.ts, 171, 5))
>getProps : Symbol(getProps, Decl(isomorphicMappedTypeInference.ts, 161, 62))
>myAny : Symbol(myAny, Decl(isomorphicMappedTypeInference.ts, 169, 5))
const o2: { foo: any; bar: any } = getProps(myAny, ['foo', 'bar']);
>o2 : Symbol(o2, Decl(isomorphicMappedTypeInference.ts, 173, 5))
>foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 173, 11))
>bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 173, 21))
>getProps : Symbol(getProps, Decl(isomorphicMappedTypeInference.ts, 161, 62))
>myAny : Symbol(myAny, Decl(isomorphicMappedTypeInference.ts, 169, 5))

View file

@ -507,3 +507,88 @@ o = foo(o, {b: 9});
>b : number
>9 : 9
// Inferring to { [P in K]: X }, where K extends keyof T, produces same inferences as
// inferring to { [P in keyof T]: X }.
declare function f20<T, K extends keyof T>(obj: Pick<T, K>): T;
>f20 : <T, K extends keyof T>(obj: Pick<T, K>) => T
>obj : Pick<T, K>
declare function f21<T, K extends keyof T>(obj: Pick<T, K>): K;
>f21 : <T, K extends keyof T>(obj: Pick<T, K>) => K
>obj : Pick<T, K>
declare function f22<T, K extends keyof T>(obj: Boxified<Pick<T, K>>): T;
>f22 : <T, K extends keyof T>(obj: Boxified<Pick<T, K>>) => T
>obj : Boxified<Pick<T, K>>
let x0 = f20({ foo: 42, bar: "hello" });
>x0 : { foo: number; bar: string; }
>f20({ foo: 42, bar: "hello" }) : { foo: number; bar: string; }
>f20 : <T, K extends keyof T>(obj: Pick<T, K>) => T
>{ foo: 42, bar: "hello" } : { foo: number; bar: string; }
>foo : number
>42 : 42
>bar : string
>"hello" : "hello"
let x1 = f21({ foo: 42, bar: "hello" });
>x1 : "foo" | "bar"
>f21({ foo: 42, bar: "hello" }) : "foo" | "bar"
>f21 : <T, K extends keyof T>(obj: Pick<T, K>) => K
>{ foo: 42, bar: "hello" } : { foo: number; bar: string; }
>foo : number
>42 : 42
>bar : string
>"hello" : "hello"
let x2 = f22({ foo: { value: 42} , bar: { value: "hello" } });
>x2 : { foo: number; bar: string; }
>f22({ foo: { value: 42} , bar: { value: "hello" } }) : { foo: number; bar: string; }
>f22 : <T, K extends keyof T>(obj: Boxified<Pick<T, K>>) => T
>{ foo: { value: 42} , bar: { value: "hello" } } : { foo: { value: number; }; bar: { value: string; }; }
>foo : { value: number; }
>{ value: 42} : { value: number; }
>value : number
>42 : 42
>bar : { value: string; }
>{ value: "hello" } : { value: string; }
>value : string
>"hello" : "hello"
// Repro from #29765
function getProps<T, K extends keyof T>(obj: T, list: K[]): Pick<T, K> {
>getProps : <T, K extends keyof T>(obj: T, list: K[]) => Pick<T, K>
>obj : T
>list : K[]
return {} as any;
>{} as any : any
>{} : {}
}
const myAny: any = {};
>myAny : any
>{} : {}
const o1 = getProps(myAny, ['foo', 'bar']);
>o1 : Pick<any, "foo" | "bar">
>getProps(myAny, ['foo', 'bar']) : Pick<any, "foo" | "bar">
>getProps : <T, K extends keyof T>(obj: T, list: K[]) => Pick<T, K>
>myAny : any
>['foo', 'bar'] : ("foo" | "bar")[]
>'foo' : "foo"
>'bar' : "bar"
const o2: { foo: any; bar: any } = getProps(myAny, ['foo', 'bar']);
>o2 : { foo: any; bar: any; }
>foo : any
>bar : any
>getProps(myAny, ['foo', 'bar']) : Pick<any, "foo" | "bar">
>getProps : <T, K extends keyof T>(obj: T, list: K[]) => Pick<T, K>
>myAny : any
>['foo', 'bar'] : ("foo" | "bar")[]
>'foo' : "foo"
>'bar' : "bar"