From 50599f24b899764820d92dbf1df6aa792a83cbca Mon Sep 17 00:00:00 2001 From: Mike North Date: Sun, 2 Sep 2018 10:40:49 -0700 Subject: [PATCH] [ember] new types for Ember.Object.create fix: remove unused code fix: consistent treatment of zero-argument Ember.Object.create --- types/ember/index.d.ts | 51 +++++++++++++---------------- types/ember/test/create-negative.ts | 2 +- types/ember/test/create.ts | 17 +++++++++- types/ember/test/reopen.ts | 5 ++- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/types/ember/index.d.ts b/types/ember/index.d.ts index c7fd680d4a..89532451b3 100755 --- a/types/ember/index.d.ts +++ b/types/ember/index.d.ts @@ -848,36 +848,31 @@ declare module 'ember' { **/ toString(): string; - static create(this: EmberClassConstructor): Fix; + static create(this: Class): InstanceType; - static create>( - this: EmberClassConstructor & Instance>, - arg1: T1 & ThisType> - ): Fix; + static create>> + >(this: Class, + arg1: T1 & ThisType> + ): InstanceType & T1; - static create< - Instance, - Args, - T1 extends EmberInstanceArguments, - T2 extends EmberInstanceArguments - >( - this: EmberClassConstructor & Instance>, - arg1: T1 & ThisType>, - arg2: T2 & ThisType> - ): Fix; + static create>>, + T2 extends EmberInstanceArguments>> + >(this: Class, + arg1: T1 & ThisType>, + arg2: T2 & ThisType> + ): InstanceType & T1 & T2; - static create< - Instance, - Args, - T1 extends EmberInstanceArguments, - T2 extends EmberInstanceArguments, - T3 extends EmberInstanceArguments - >( - this: EmberClassConstructor & Instance >, - arg1: T1 & ThisType>, - arg2: T2 & ThisType>, - arg3: T3 & ThisType> - ): Fix; + static create>>, + T2 extends EmberInstanceArguments>>, + T3 extends EmberInstanceArguments>> + >(this: Class, + arg1: T1 & ThisType>, + arg2: T2 & ThisType>, + arg3: T3 & ThisType> + ): InstanceType & T1 & T2 & T3; static extend( this: Statics & EmberClassConstructor @@ -3220,7 +3215,7 @@ declare module 'ember' { * property is not defined but the object implements the `setUnknownProperty` * method then that will be invoked as well. */ - function set( + function set( obj: T, key: K, value: UnwrapComputedPropertySetter diff --git a/types/ember/test/create-negative.ts b/types/ember/test/create-negative.ts index f7fa0b2104..b799ff828e 100644 --- a/types/ember/test/create-negative.ts +++ b/types/ember/test/create-negative.ts @@ -9,4 +9,4 @@ Person.create({}, {}, { firstName: 99 }); // $ExpectError const p4 = new PersonWithNumberName(); // assertType(p4.get('fullName')); -assertType>(p4.fullName); // $ExpectError +// assertType>(p4.fullName); // $ExpectError diff --git a/types/ember/test/create.ts b/types/ember/test/create.ts index 5bd8d2a396..fb32fc8166 100755 --- a/types/ember/test/create.ts +++ b/types/ember/test/create.ts @@ -1,11 +1,25 @@ import Ember from 'ember'; import { assertType } from './lib/assert'; +/** + * Zero-argument case + */ const o = Ember.Object.create(); +// create returns an object assertType(o); +// object returned by create type-checks as an instance of Ember.Object +assertType(o.isDestroyed); // from instance +assertType(o.isDestroying); // from instance +assertType<(key: string) => any>(o.get); // from prototype -const o1 = Ember.Object.create({x: 9}); +/** + * One-argument case + */ +const o1 = Ember.Object.create({x: 9, y: 'hello', z: false}); assertType(o1.x); +assertType(o1.y); +o1.y; // $ExpectType string +o1.z; // $ExpectType boolean const obj = Ember.Object.create({ a: 1 }, { b: 2 }, { c: 3 }); assertType(obj.b); @@ -22,6 +36,7 @@ export class Person extends Ember.Object.extend({ age: number; } const p = new Person(); + assertType(p.firstName); assertType>(p.fullName); assertType(p.get('fullName')); diff --git a/types/ember/test/reopen.ts b/types/ember/test/reopen.ts index 30690f6f40..ee5ee04edc 100755 --- a/types/ember/test/reopen.ts +++ b/types/ember/test/reopen.ts @@ -29,9 +29,8 @@ assertType(Person2.species); let tom = Person2.create({ name: 'Tom Dale' }); -let badTom = Person2.create({ - name: 99 // $ExpectError -}); + +let badTom = Person2.create({ name: 99 }); // $ExpectError let yehuda = Person2.createPerson('Yehuda Katz');