mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2025-10-16 12:05:41 +00:00
Merge pull request #33521 from mike-north/object-proxy-generic
[@ember/object] - Make Ember.ObjectProxy generic
This commit is contained in:
commit
350ea557e8
24
types/ember__object/proxy.d.ts
vendored
24
types/ember__object/proxy.d.ts
vendored
@ -1,12 +1,32 @@
|
||||
import EmberObject from "@ember/object";
|
||||
import {
|
||||
UnwrapComputedPropertyGetter,
|
||||
UnwrapComputedPropertyGetters
|
||||
} from "@ember/object/-private/types";
|
||||
|
||||
/**
|
||||
* `Ember.ObjectProxy` forwards all properties not defined by the proxy itself
|
||||
* to a proxied `content` object.
|
||||
*/
|
||||
export default class ObjectProxy extends EmberObject {
|
||||
export default class ObjectProxy<T extends object = object> extends EmberObject {
|
||||
/**
|
||||
* The object whose properties will be forwarded.
|
||||
*/
|
||||
content: object;
|
||||
content: T | undefined;
|
||||
|
||||
get<K extends keyof this>(key: K): UnwrapComputedPropertyGetter<this[K]>;
|
||||
get<K extends keyof T>(key: K): UnwrapComputedPropertyGetter<T[K]> | undefined;
|
||||
|
||||
getProperties<K extends keyof this>(
|
||||
list: K[]
|
||||
): Pick<UnwrapComputedPropertyGetters<this>, K>;
|
||||
getProperties<K extends keyof this>(
|
||||
...list: K[]
|
||||
): Pick<UnwrapComputedPropertyGetters<this>, K>;
|
||||
getProperties<K extends keyof T>(
|
||||
list: K[]
|
||||
): Pick<Partial<UnwrapComputedPropertyGetters<T>>, K>;
|
||||
getProperties<K extends keyof T>(
|
||||
...list: K[]
|
||||
): Pick<Partial<UnwrapComputedPropertyGetters<T>>, K>;
|
||||
}
|
||||
|
||||
38
types/ember__object/test/proxy.ts
Normal file
38
types/ember__object/test/proxy.ts
Normal file
@ -0,0 +1,38 @@
|
||||
import ObjectProxy from "@ember/object/proxy";
|
||||
|
||||
interface Book {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
chapters: Array<{ title: string }>;
|
||||
}
|
||||
|
||||
class DefaultProxy extends ObjectProxy {}
|
||||
DefaultProxy.create().content; // $ExpectType object | undefined
|
||||
|
||||
class BookProxy extends ObjectProxy<Book> {
|
||||
private readonly baz = 'baz';
|
||||
|
||||
getTitle() {
|
||||
return this.get('title');
|
||||
}
|
||||
|
||||
getPropertiesTitleSubtitle() {
|
||||
return this.getProperties('title', 'subtitle');
|
||||
}
|
||||
}
|
||||
|
||||
const book = BookProxy.create();
|
||||
book.content; // $ExpectType Book | undefined
|
||||
|
||||
book.get("unknownProperty"); // $ExpectError
|
||||
book.get("title"); // $ExpectType string | undefined
|
||||
book.getTitle(); // $ExpectType string | undefined
|
||||
|
||||
book.getProperties("title", "unknownProperty"); // $ExpectError
|
||||
book.getProperties("title", "subtitle"); // $ExpectType Pick<Partial<UnwrapComputedPropertyGetters<Book>>, "title" | "subtitle">
|
||||
book.getPropertiesTitleSubtitle(); // $ExpectType Pick<Partial<UnwrapComputedPropertyGetters<Book>>, "title" | "subtitle">
|
||||
|
||||
book.getProperties(["subtitle", "chapters"]); // $ExpectType Pick<Partial<UnwrapComputedPropertyGetters<Book>>, "subtitle" | "chapters">
|
||||
book.getProperties(["title", "unknownProperty"]); // $ExpectError
|
||||
|
||||
book.get("baz"); // $ExpectError
|
||||
@ -49,6 +49,7 @@
|
||||
"test/extend.ts",
|
||||
"test/object.ts",
|
||||
"test/observable.ts",
|
||||
"test/proxy.ts",
|
||||
"test/reopen.ts"
|
||||
]
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user