diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 038d0344fda72..23bb06c5d2e18 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -137,16 +137,10 @@ interface ObjectConstructor { getOwnPropertyNames(o: any): string[]; /** - * Creates an object that has null prototype. - * @param o Object to use as a prototype. May be null - */ - create(o: null): any; - - /** - * Creates an object that has the specified prototype, and that optionally contains specified properties. - * @param o Object to use as a prototype. May be null + * Creates an object that has the specified prototype or that has null prototype. + * @param o Object to use as a prototype. May be null. */ - create(o: T): T; + create(o: T | null): T | object; /** * Creates an object that has the specified prototype, and that optionally contains specified properties. diff --git a/tests/baselines/reference/assigningFromObjectToAnythingElse.errors.txt b/tests/baselines/reference/assigningFromObjectToAnythingElse.errors.txt index 289883d747148..070339e47262c 100644 --- a/tests/baselines/reference/assigningFromObjectToAnythingElse.errors.txt +++ b/tests/baselines/reference/assigningFromObjectToAnythingElse.errors.txt @@ -1,11 +1,11 @@ tests/cases/compiler/assigningFromObjectToAnythingElse.ts(3,1): error TS2322: Type 'Object' is not assignable to type 'RegExp'. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? Property 'exec' is missing in type 'Object'. -tests/cases/compiler/assigningFromObjectToAnythingElse.ts(5,5): error TS2322: Type 'Object' is not assignable to type 'String'. - The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? - Property 'charAt' is missing in type 'Object'. -tests/cases/compiler/assigningFromObjectToAnythingElse.ts(6,5): error TS2322: Type 'Number' is not assignable to type 'String'. - Property 'charAt' is missing in type 'Number'. +tests/cases/compiler/assigningFromObjectToAnythingElse.ts(5,5): error TS2322: Type 'object | Object' is not assignable to type 'String'. + Type 'object' is not assignable to type 'String'. + Property 'charAt' is missing in type '{}'. +tests/cases/compiler/assigningFromObjectToAnythingElse.ts(6,5): error TS2322: Type 'object | Number' is not assignable to type 'String'. + Type 'object' is not assignable to type 'String'. tests/cases/compiler/assigningFromObjectToAnythingElse.ts(8,5): error TS2322: Type 'Object' is not assignable to type 'Error'. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? Property 'name' is missing in type 'Object'. @@ -22,13 +22,13 @@ tests/cases/compiler/assigningFromObjectToAnythingElse.ts(8,5): error TS2322: Ty var a: String = Object.create(""); ~ -!!! error TS2322: Type 'Object' is not assignable to type 'String'. -!!! error TS2322: The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? -!!! error TS2322: Property 'charAt' is missing in type 'Object'. +!!! error TS2322: Type 'object | Object' is not assignable to type 'String'. +!!! error TS2322: Type 'object' is not assignable to type 'String'. +!!! error TS2322: Property 'charAt' is missing in type '{}'. var c: String = Object.create(1); ~ -!!! error TS2322: Type 'Number' is not assignable to type 'String'. -!!! error TS2322: Property 'charAt' is missing in type 'Number'. +!!! error TS2322: Type 'object | Number' is not assignable to type 'String'. +!!! error TS2322: Type 'object' is not assignable to type 'String'. var w: Error = new Object(); ~ diff --git a/tests/baselines/reference/objectCreate-errors.errors.txt b/tests/baselines/reference/objectCreate-errors.errors.txt new file mode 100644 index 0000000000000..38b9158351eb3 --- /dev/null +++ b/tests/baselines/reference/objectCreate-errors.errors.txt @@ -0,0 +1,38 @@ +tests/cases/compiler/objectCreate-errors.ts(2,24): error TS2345: Argument of type '1' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(3,24): error TS2345: Argument of type '"string"' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(4,24): error TS2345: Argument of type 'false' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(5,24): error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(8,24): error TS2345: Argument of type '1' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(9,24): error TS2345: Argument of type '"string"' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(10,24): error TS2345: Argument of type 'false' is not assignable to parameter of type 'object | null'. +tests/cases/compiler/objectCreate-errors.ts(11,24): error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'object | null'. + + +==== tests/cases/compiler/objectCreate-errors.ts (8 errors) ==== + + var e1 = Object.create(1); // Error + ~ +!!! error TS2345: Argument of type '1' is not assignable to parameter of type 'object | null'. + var e2 = Object.create("string"); // Error + ~~~~~~~~ +!!! error TS2345: Argument of type '"string"' is not assignable to parameter of type 'object | null'. + var e3 = Object.create(false); // Error + ~~~~~ +!!! error TS2345: Argument of type 'false' is not assignable to parameter of type 'object | null'. + var e4 = Object.create(undefined); // Error + ~~~~~~~~~ +!!! error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'object | null'. + + + var e5 = Object.create(1, {}); // Error + ~ +!!! error TS2345: Argument of type '1' is not assignable to parameter of type 'object | null'. + var e6 = Object.create("string", {}); // Error + ~~~~~~~~ +!!! error TS2345: Argument of type '"string"' is not assignable to parameter of type 'object | null'. + var e7 = Object.create(false, {}); // Error + ~~~~~ +!!! error TS2345: Argument of type 'false' is not assignable to parameter of type 'object | null'. + var e8 = Object.create(undefined, {}); // Error + ~~~~~~~~~ +!!! error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'object | null'. \ No newline at end of file diff --git a/tests/baselines/reference/objectCreate-errors.js b/tests/baselines/reference/objectCreate-errors.js new file mode 100644 index 0000000000000..959b2f9473df3 --- /dev/null +++ b/tests/baselines/reference/objectCreate-errors.js @@ -0,0 +1,22 @@ +//// [objectCreate-errors.ts] + +var e1 = Object.create(1); // Error +var e2 = Object.create("string"); // Error +var e3 = Object.create(false); // Error +var e4 = Object.create(undefined); // Error + + +var e5 = Object.create(1, {}); // Error +var e6 = Object.create("string", {}); // Error +var e7 = Object.create(false, {}); // Error +var e8 = Object.create(undefined, {}); // Error + +//// [objectCreate-errors.js] +var e1 = Object.create(1); // Error +var e2 = Object.create("string"); // Error +var e3 = Object.create(false); // Error +var e4 = Object.create(undefined); // Error +var e5 = Object.create(1, {}); // Error +var e6 = Object.create("string", {}); // Error +var e7 = Object.create(false, {}); // Error +var e8 = Object.create(undefined, {}); // Error diff --git a/tests/baselines/reference/objectCreate.js b/tests/baselines/reference/objectCreate.js new file mode 100644 index 0000000000000..728fa8ca21aa0 --- /dev/null +++ b/tests/baselines/reference/objectCreate.js @@ -0,0 +1,28 @@ +//// [objectCreate.ts] + +declare var union: null | { a: number, b: string }; + +var n = Object.create(null); // object +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +var u = Object.create(union); // object | {a: number, b: string } +var e = Object.create({}); // {} +var o = Object.create({}); // object + +var a = Object.create(null, {}); // any +var a = Object.create({ a: 1, b: "" }, {}); +var a = Object.create(union, {}); +var a = Object.create({}, {}); +var a = Object.create({}, {}); + + +//// [objectCreate.js] +var n = Object.create(null); // object +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +var u = Object.create(union); // object | {a: number, b: string } +var e = Object.create({}); // {} +var o = Object.create({}); // object +var a = Object.create(null, {}); // any +var a = Object.create({ a: 1, b: "" }, {}); +var a = Object.create(union, {}); +var a = Object.create({}, {}); +var a = Object.create({}, {}); diff --git a/tests/baselines/reference/objectCreate.symbols b/tests/baselines/reference/objectCreate.symbols new file mode 100644 index 0000000000000..7ae0a796cc85d --- /dev/null +++ b/tests/baselines/reference/objectCreate.symbols @@ -0,0 +1,73 @@ +=== tests/cases/compiler/objectCreate.ts === + +declare var union: null | { a: number, b: string }; +>union : Symbol(union, Decl(objectCreate.ts, 1, 11)) +>a : Symbol(a, Decl(objectCreate.ts, 1, 27)) +>b : Symbol(b, Decl(objectCreate.ts, 1, 38)) + +var n = Object.create(null); // object +>n : Symbol(n, Decl(objectCreate.ts, 3, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +>t : Symbol(t, Decl(objectCreate.ts, 4, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>a : Symbol(a, Decl(objectCreate.ts, 4, 23)) +>b : Symbol(b, Decl(objectCreate.ts, 4, 29)) + +var u = Object.create(union); // object | {a: number, b: string } +>u : Symbol(u, Decl(objectCreate.ts, 5, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>union : Symbol(union, Decl(objectCreate.ts, 1, 11)) + +var e = Object.create({}); // {} +>e : Symbol(e, Decl(objectCreate.ts, 6, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var o = Object.create({}); // object +>o : Symbol(o, Decl(objectCreate.ts, 7, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var a = Object.create(null, {}); // any +>a : Symbol(a, Decl(objectCreate.ts, 9, 3), Decl(objectCreate.ts, 10, 3), Decl(objectCreate.ts, 11, 3), Decl(objectCreate.ts, 12, 3), Decl(objectCreate.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var a = Object.create({ a: 1, b: "" }, {}); +>a : Symbol(a, Decl(objectCreate.ts, 9, 3), Decl(objectCreate.ts, 10, 3), Decl(objectCreate.ts, 11, 3), Decl(objectCreate.ts, 12, 3), Decl(objectCreate.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>a : Symbol(a, Decl(objectCreate.ts, 10, 23)) +>b : Symbol(b, Decl(objectCreate.ts, 10, 29)) + +var a = Object.create(union, {}); +>a : Symbol(a, Decl(objectCreate.ts, 9, 3), Decl(objectCreate.ts, 10, 3), Decl(objectCreate.ts, 11, 3), Decl(objectCreate.ts, 12, 3), Decl(objectCreate.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>union : Symbol(union, Decl(objectCreate.ts, 1, 11)) + +var a = Object.create({}, {}); +>a : Symbol(a, Decl(objectCreate.ts, 9, 3), Decl(objectCreate.ts, 10, 3), Decl(objectCreate.ts, 11, 3), Decl(objectCreate.ts, 12, 3), Decl(objectCreate.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var a = Object.create({}, {}); +>a : Symbol(a, Decl(objectCreate.ts, 9, 3), Decl(objectCreate.ts, 10, 3), Decl(objectCreate.ts, 11, 3), Decl(objectCreate.ts, 12, 3), Decl(objectCreate.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + diff --git a/tests/baselines/reference/objectCreate.types b/tests/baselines/reference/objectCreate.types new file mode 100644 index 0000000000000..028c98af8175f --- /dev/null +++ b/tests/baselines/reference/objectCreate.types @@ -0,0 +1,103 @@ +=== tests/cases/compiler/objectCreate.ts === + +declare var union: null | { a: number, b: string }; +>union : { a: number; b: string; } | null +>null : null +>a : number +>b : string + +var n = Object.create(null); // object +>n : object +>Object.create(null) : object +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>null : null + +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +>t : object | { a: number; b: string; } +>Object.create({ a: 1, b: "" }) : object | { a: number; b: string; } +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>{ a: 1, b: "" } : { a: number; b: string; } +>a : number +>1 : 1 +>b : string +>"" : "" + +var u = Object.create(union); // object | {a: number, b: string } +>u : object | { a: number; b: string; } +>Object.create(union) : object | { a: number; b: string; } +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>union : { a: number; b: string; } | null + +var e = Object.create({}); // {} +>e : object | {} +>Object.create({}) : object | {} +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>{} : {} + +var o = Object.create({}); // object +>o : object +>Object.create({}) : object +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>{} : object +>{} : {} + +var a = Object.create(null, {}); // any +>a : any +>Object.create(null, {}) : any +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>null : null +>{} : {} + +var a = Object.create({ a: 1, b: "" }, {}); +>a : any +>Object.create({ a: 1, b: "" }, {}) : any +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>{ a: 1, b: "" } : { a: number; b: string; } +>a : number +>1 : 1 +>b : string +>"" : "" +>{} : {} + +var a = Object.create(union, {}); +>a : any +>Object.create(union, {}) : any +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>union : { a: number; b: string; } | null +>{} : {} + +var a = Object.create({}, {}); +>a : any +>Object.create({}, {}) : any +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>{} : {} +>{} : {} + +var a = Object.create({}, {}); +>a : any +>Object.create({}, {}) : any +>Object.create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T | null): object | T; (o: object | null, properties: PropertyDescriptorMap): any; } +>{} : object +>{} : {} +>{} : {} + diff --git a/tests/baselines/reference/objectCreate2.js b/tests/baselines/reference/objectCreate2.js new file mode 100644 index 0000000000000..cfc79c2ef355e --- /dev/null +++ b/tests/baselines/reference/objectCreate2.js @@ -0,0 +1,28 @@ +//// [objectCreate2.ts] + +declare var union: null | { a: number, b: string }; + +var n = Object.create(null); // any +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +var u = Object.create(union); // {a: number, b: string } +var e = Object.create({}); // {} +var o = Object.create({}); // object + +var a = Object.create(null, {}); // any +var a = Object.create({ a: 1, b: "" }, {}); +var a = Object.create(union, {}); +var a = Object.create({}, {}); +var a = Object.create({}, {}); + + +//// [objectCreate2.js] +var n = Object.create(null); // any +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +var u = Object.create(union); // {a: number, b: string } +var e = Object.create({}); // {} +var o = Object.create({}); // object +var a = Object.create(null, {}); // any +var a = Object.create({ a: 1, b: "" }, {}); +var a = Object.create(union, {}); +var a = Object.create({}, {}); +var a = Object.create({}, {}); diff --git a/tests/baselines/reference/objectCreate2.symbols b/tests/baselines/reference/objectCreate2.symbols new file mode 100644 index 0000000000000..bf57b6d5e073d --- /dev/null +++ b/tests/baselines/reference/objectCreate2.symbols @@ -0,0 +1,73 @@ +=== tests/cases/compiler/objectCreate2.ts === + +declare var union: null | { a: number, b: string }; +>union : Symbol(union, Decl(objectCreate2.ts, 1, 11)) +>a : Symbol(a, Decl(objectCreate2.ts, 1, 27)) +>b : Symbol(b, Decl(objectCreate2.ts, 1, 38)) + +var n = Object.create(null); // any +>n : Symbol(n, Decl(objectCreate2.ts, 3, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +>t : Symbol(t, Decl(objectCreate2.ts, 4, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>a : Symbol(a, Decl(objectCreate2.ts, 4, 23)) +>b : Symbol(b, Decl(objectCreate2.ts, 4, 29)) + +var u = Object.create(union); // {a: number, b: string } +>u : Symbol(u, Decl(objectCreate2.ts, 5, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>union : Symbol(union, Decl(objectCreate2.ts, 1, 11)) + +var e = Object.create({}); // {} +>e : Symbol(e, Decl(objectCreate2.ts, 6, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var o = Object.create({}); // object +>o : Symbol(o, Decl(objectCreate2.ts, 7, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var a = Object.create(null, {}); // any +>a : Symbol(a, Decl(objectCreate2.ts, 9, 3), Decl(objectCreate2.ts, 10, 3), Decl(objectCreate2.ts, 11, 3), Decl(objectCreate2.ts, 12, 3), Decl(objectCreate2.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var a = Object.create({ a: 1, b: "" }, {}); +>a : Symbol(a, Decl(objectCreate2.ts, 9, 3), Decl(objectCreate2.ts, 10, 3), Decl(objectCreate2.ts, 11, 3), Decl(objectCreate2.ts, 12, 3), Decl(objectCreate2.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>a : Symbol(a, Decl(objectCreate2.ts, 10, 23)) +>b : Symbol(b, Decl(objectCreate2.ts, 10, 29)) + +var a = Object.create(union, {}); +>a : Symbol(a, Decl(objectCreate2.ts, 9, 3), Decl(objectCreate2.ts, 10, 3), Decl(objectCreate2.ts, 11, 3), Decl(objectCreate2.ts, 12, 3), Decl(objectCreate2.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>union : Symbol(union, Decl(objectCreate2.ts, 1, 11)) + +var a = Object.create({}, {}); +>a : Symbol(a, Decl(objectCreate2.ts, 9, 3), Decl(objectCreate2.ts, 10, 3), Decl(objectCreate2.ts, 11, 3), Decl(objectCreate2.ts, 12, 3), Decl(objectCreate2.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +var a = Object.create({}, {}); +>a : Symbol(a, Decl(objectCreate2.ts, 9, 3), Decl(objectCreate2.ts, 10, 3), Decl(objectCreate2.ts, 11, 3), Decl(objectCreate2.ts, 12, 3), Decl(objectCreate2.ts, 13, 3)) +>Object.create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>create : Symbol(ObjectConstructor.create, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + diff --git a/tests/baselines/reference/objectCreate2.types b/tests/baselines/reference/objectCreate2.types new file mode 100644 index 0000000000000..1b33723b0c94b --- /dev/null +++ b/tests/baselines/reference/objectCreate2.types @@ -0,0 +1,103 @@ +=== tests/cases/compiler/objectCreate2.ts === + +declare var union: null | { a: number, b: string }; +>union : { a: number; b: string; } +>null : null +>a : number +>b : string + +var n = Object.create(null); // any +>n : any +>Object.create(null) : any +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>null : null + +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +>t : object | { a: number; b: string; } +>Object.create({ a: 1, b: "" }) : object | { a: number; b: string; } +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>{ a: 1, b: "" } : { a: number; b: string; } +>a : number +>1 : 1 +>b : string +>"" : "" + +var u = Object.create(union); // {a: number, b: string } +>u : object | { a: number; b: string; } +>Object.create(union) : object | { a: number; b: string; } +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>union : { a: number; b: string; } + +var e = Object.create({}); // {} +>e : object | {} +>Object.create({}) : object | {} +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>{} : {} + +var o = Object.create({}); // object +>o : object +>Object.create({}) : object +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>{} : object +>{} : {} + +var a = Object.create(null, {}); // any +>a : any +>Object.create(null, {}) : any +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>null : null +>{} : {} + +var a = Object.create({ a: 1, b: "" }, {}); +>a : any +>Object.create({ a: 1, b: "" }, {}) : any +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>{ a: 1, b: "" } : { a: number; b: string; } +>a : number +>1 : 1 +>b : string +>"" : "" +>{} : {} + +var a = Object.create(union, {}); +>a : any +>Object.create(union, {}) : any +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>union : { a: number; b: string; } +>{} : {} + +var a = Object.create({}, {}); +>a : any +>Object.create({}, {}) : any +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>{} : {} +>{} : {} + +var a = Object.create({}, {}); +>a : any +>Object.create({}, {}) : any +>Object.create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>Object : ObjectConstructor +>create : { (o: T): object | T; (o: object, properties: PropertyDescriptorMap): any; } +>{} : object +>{} : {} +>{} : {} + diff --git a/tests/cases/compiler/objectCreate-errors.ts b/tests/cases/compiler/objectCreate-errors.ts new file mode 100644 index 0000000000000..ea7b8bd95abfe --- /dev/null +++ b/tests/cases/compiler/objectCreate-errors.ts @@ -0,0 +1,12 @@ +// @strictNullChecks: true + +var e1 = Object.create(1); // Error +var e2 = Object.create("string"); // Error +var e3 = Object.create(false); // Error +var e4 = Object.create(undefined); // Error + + +var e5 = Object.create(1, {}); // Error +var e6 = Object.create("string", {}); // Error +var e7 = Object.create(false, {}); // Error +var e8 = Object.create(undefined, {}); // Error \ No newline at end of file diff --git a/tests/cases/compiler/objectCreate.ts b/tests/cases/compiler/objectCreate.ts new file mode 100644 index 0000000000000..a497ff6b95b3e --- /dev/null +++ b/tests/cases/compiler/objectCreate.ts @@ -0,0 +1,15 @@ +// @strictNullChecks: true + +declare var union: null | { a: number, b: string }; + +var n = Object.create(null); // object +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +var u = Object.create(union); // object | {a: number, b: string } +var e = Object.create({}); // {} +var o = Object.create({}); // object + +var a = Object.create(null, {}); // any +var a = Object.create({ a: 1, b: "" }, {}); +var a = Object.create(union, {}); +var a = Object.create({}, {}); +var a = Object.create({}, {}); diff --git a/tests/cases/compiler/objectCreate2.ts b/tests/cases/compiler/objectCreate2.ts new file mode 100644 index 0000000000000..d28adaae32e1f --- /dev/null +++ b/tests/cases/compiler/objectCreate2.ts @@ -0,0 +1,15 @@ +// @strictNullChecks: false + +declare var union: null | { a: number, b: string }; + +var n = Object.create(null); // any +var t = Object.create({ a: 1, b: "" }); // {a: number, b: string } +var u = Object.create(union); // {a: number, b: string } +var e = Object.create({}); // {} +var o = Object.create({}); // object + +var a = Object.create(null, {}); // any +var a = Object.create({ a: 1, b: "" }, {}); +var a = Object.create(union, {}); +var a = Object.create({}, {}); +var a = Object.create({}, {});