Skip to content

Commit cf85b01

Browse files
committed
[ember] relax types around Ember.set,setProperties
- Fixes typed-ember/ember-cli-typescript#308 - Workaround due to breaking change microsoft/TypeScript#26120 - Would much much cleaner w/ a fix for microsoft/TypeScript#27014
1 parent 5099333 commit cf85b01

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

types/ember/index.d.ts

+10
Original file line numberDiff line numberDiff line change
@@ -3233,6 +3233,11 @@ declare module 'ember' {
32333233
key: K,
32343234
value: UnwrapComputedPropertySetter<T[K]>
32353235
): UnwrapComputedPropertyGetter<T[K]>;
3236+
function set<T, K extends keyof T>(
3237+
obj: T,
3238+
key: K,
3239+
value: T[K]
3240+
): T[K];
32363241
/**
32373242
* Error-tolerant form of `Ember.set`. Will not blow up if any part of the
32383243
* chain is `undefined`, `null`, or destroyed.
@@ -3247,6 +3252,11 @@ declare module 'ember' {
32473252
obj: T,
32483253
hash: Pick<UnwrapComputedPropertySetters<T>, K>
32493254
): Pick<UnwrapComputedPropertyGetters<T>, K>;
3255+
// TODO: in TS2.9 - Pick<UnwrapComputedPropertySetters<T> | T, K>
3256+
function setProperties<T, K extends keyof T>(
3257+
obj: T,
3258+
hash: Pick<T, K>
3259+
): Pick<T, K>;
32503260
/**
32513261
* Detects when a specific package of Ember (e.g. 'Ember.Application')
32523262
* has fully loaded and is available for extension.

types/ember/test/object.ts

+17
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,20 @@ class Foo extends Ember.Object.extend({
4949
});
5050
}
5151
}
52+
53+
export class Foo2 extends Ember.Object {
54+
name!: string;
55+
56+
changeName(name: string) {
57+
let a: string = this.set('name', name);
58+
let b: number = this.set('name', name); // $ExpectError
59+
let x: string = Ember.set(this, 'name', name);
60+
let y: number = Ember.set(this, 'name', name); // $ExpectError
61+
this.setProperties({
62+
name
63+
});
64+
Ember.setProperties(this, {
65+
name
66+
});
67+
}
68+
}

0 commit comments

Comments
 (0)