Merge pull request #23684 from chriskrycho/fix-computed-lookups

Ember: make `get` unwrap module computed properties.
This commit is contained in:
Daniel Rosenwasser
2018-02-16 19:40:48 -08:00
committed by GitHub
2 changed files with 8 additions and 3 deletions

View File

@@ -20,6 +20,7 @@ declare module 'ember' {
import { Registry as ServiceRegistry } from '@ember/service';
import { Registry as ControllerRegistry } from '@ember/controller';
import ModuleComputed from '@ember/object/computed';
// Get an alias to the global Array type to use in inner scope below.
type GlobalArray<T> = T[];
@@ -27,7 +28,7 @@ declare module 'ember' {
/**
* Deconstructs computed properties into the types which would be returned by `.get()`.
*/
type ComputedProperties<T> = { [K in keyof T]: Ember.ComputedProperty<T[K]> | T[K] };
type ComputedProperties<T> = { [K in keyof T]: Ember.ComputedProperty<T[K]> | ModuleComputed<T[K]> | T[K] };
/**
* Check that any arguments to `create()` match the type's properties.

View File

@@ -1,6 +1,6 @@
import Ember from 'ember';
import Component from '@ember/component';
import { or } from '@ember/object/computed';
import Computed, { alias, or } from '@ember/object/computed';
import { assertType } from './lib/assert';
const Person = Ember.Object.extend({
@@ -50,7 +50,9 @@ const Person = Ember.Object.extend({
}).property('firstName')
.meta({ foo: 'bar' })
.volatile()
.readOnly()
.readOnly(),
explicitlyDeclared: alias('fullName') as Computed<string>,
});
const person = Person.create({
@@ -68,6 +70,7 @@ assertType<Ember.ComputedProperty<string>>(person.fullNameWritable);
assertType<Ember.ComputedProperty<string>>(person.fullNameGetOnly);
assertType<Ember.ComputedProperty<string>>(person.fullNameSetOnly);
assertType<Ember.ComputedProperty<string>>(person.combinators);
assertType<Ember.ComputedProperty<string>>(person.explicitlyDeclared);
assertType<string>(person.get('firstName'));
assertType<number>(person.get('age'));
@@ -78,6 +81,7 @@ assertType<string>(person.get('fullNameWritable'));
assertType<string>(person.get('fullNameGetOnly'));
assertType<string>(person.get('fullNameSetOnly'));
assertType<string>(person.get('combinators'));
assertType<string>(person.get('explicitlyDeclared'));
assertType<{ firstName: string, fullName: string, age: number }>(person.getProperties('firstName', 'fullName', 'age'));