The requested changes are too big and content was truncated. Show full diff
@@ -0,0 +1,25 | |||||
|
1 | import * as _WidgetBase from "dijit/_WidgetBase"; | |||
|
2 | import * as Stateful from "dojo/Stateful"; | |||
|
3 | ||||
|
4 | export interface IRemovable { | |||
|
5 | remove(): void; | |||
|
6 | } | |||
|
7 | ||||
|
8 | type StatefulAttrs<T> = T extends Stateful<infer A> ? A : never; | |||
|
9 | ||||
|
10 | interface WatchFn { | |||
|
11 | <T extends Stateful, K extends keyof StatefulAttrs<T>>( | |||
|
12 | target: T, | |||
|
13 | prop: K, | |||
|
14 | render: (model: StatefulAttrs<T>[K]) => any, | |||
|
15 | own?: (obj: IRemovable) => void | |||
|
16 | ); | |||
|
17 | <W extends _WidgetBase, K extends keyof W>( | |||
|
18 | target: W, | |||
|
19 | prop: K, | |||
|
20 | render: (model: W[K]) => any, | |||
|
21 | own?: (obj: IRemovable) => void | |||
|
22 | ); | |||
|
23 | } | |||
|
24 | ||||
|
25 | export declare const watch: WatchFn; |
1 | NO CONTENT: modified file |
|
NO CONTENT: modified file | ||
The requested commit or file is too big and content was truncated. Show full diff |
@@ -7,12 +7,12 declare module 'dijit/_Widget' { | |||||
7 | } |
|
7 | } | |
8 |
|
8 | |||
9 | declare module 'dijit/_WidgetBase' { |
|
9 | declare module 'dijit/_WidgetBase' { | |
10 | type _WidgetBase<A = any> = dijit._WidgetBase<A>; |
|
10 | type _WidgetBase<E extends { [k in keyof E]: Event } = {}> = dijit._WidgetBase<E & GlobalEventHandlersEventMap>; | |
11 |
|
11 | |||
12 | // individual _WidgetBase constructor to keep type parameters |
|
12 | // individual _WidgetBase constructor to keep type parameters | |
13 | interface _WidgetBaseConstructor { |
|
13 | interface _WidgetBaseConstructor { | |
14 |
new <A = |
|
14 | new <A = {}, E extends { [k in keyof E]: Event } = {}>(params?: Partial<_WidgetBase<E> & A>, srcNodeRef?: dojo.NodeOrString): _WidgetBase<E> & dojo._base.DeclareCreatedObject; | |
15 | prototype: _WidgetBase; |
|
15 | prototype: _WidgetBase<any>; | |
16 | } |
|
16 | } | |
17 | const _WidgetBase: _WidgetBaseConstructor; |
|
17 | const _WidgetBase: _WidgetBaseConstructor; | |
18 | export = _WidgetBase; |
|
18 | export = _WidgetBase; |
@@ -1961,7 +1961,7 declare namespace dojo { | |||||
1961 | /** |
|
1961 | /** | |
1962 | * Watches a property for changes |
|
1962 | * Watches a property for changes | |
1963 | */ |
|
1963 | */ | |
1964 |
watch(callback: |
|
1964 | watch(callback:(prop: keyof any, oldValue: any, newValue: any) => void): WatchHandle; | |
1965 | watch<K extends keyof T>(name: K, callback: (prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle; |
|
1965 | watch<K extends keyof T>(name: K, callback: (prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle; | |
1966 | } |
|
1966 | } | |
1967 |
|
1967 |
@@ -724,7 +724,7 declare module 'dojo/sniff' { | |||||
724 | } |
|
724 | } | |
725 |
|
725 | |||
726 | declare module 'dojo/Stateful' { |
|
726 | declare module 'dojo/Stateful' { | |
727 |
type Stateful<T = any> = dojo.Stateful< |
|
727 | type Stateful<T = any> = dojo.Stateful<T>; | |
728 | const Stateful: dojo.StatefulConstructor; |
|
728 | const Stateful: dojo.StatefulConstructor; | |
729 | export = Stateful; |
|
729 | export = Stateful; | |
730 | } |
|
730 | } |
@@ -1,4 +1,5 | |||||
1 |
import Stateful |
|
1 | import * as Stateful from "dojo/Stateful"; | |
|
2 | import { StatefulAttrs, watch } from "./traits"; | |||
2 |
|
3 | |||
3 | interface ScheduleAttrs { |
|
4 | interface ScheduleAttrs { | |
4 | title: string; |
|
5 | title: string; | |
@@ -18,4 +19,8 const model = new Schedule({duration: 10 | |||||
18 | model.get("title"); |
|
19 | model.get("title"); | |
19 | model.get("duration"); |
|
20 | model.get("duration"); | |
20 |
|
21 | |||
21 | model.set("duration", 12); No newline at end of file |
|
22 | model.set("duration", 12); | |
|
23 | ||||
|
24 | watch(model, "duration", v => v); | |||
|
25 | ||||
|
26 | declare const o : StatefulAttrs<Schedule>; No newline at end of file |
@@ -1,5 +1,5 | |||||
1 |
import Memory |
|
1 | import * as Memory from "dojo/store/Memory"; | |
2 |
import Observable |
|
2 | import * as Observable from "dojo/store/Observable"; | |
3 |
|
3 | |||
4 | interface Schedule { |
|
4 | interface Schedule { | |
5 |
|
5 | |||
@@ -16,13 +16,11 const observable = new Observable(store) | |||||
16 |
|
16 | |||
17 | const mem = new Memory<Schedule>(); |
|
17 | const mem = new Memory<Schedule>(); | |
18 |
|
18 | |||
19 | (async () => { |
|
19 | observable.query().observe(() => { }); | |
20 |
|
|
20 | store.query().forEach(() => { }); | |
21 | store.query().forEach(() => {}); |
|
21 | const total = await store.query().total; | |
22 |
|
|
22 | const result = await store.query(); | |
23 | const result = await store.query(); |
|
|||
24 |
|
23 | |||
25 |
|
|
24 | mem.query(); | |
26 |
|
25 | |||
27 |
|
|
26 | mem.add({ duration: 10, title: "Test event" }); | |
28 | })(); No newline at end of file |
|
@@ -1,17 +1,41 | |||||
1 |
import _WidgetBase |
|
1 | import * as _WidgetBase from "dijit/_WidgetBase"; | |
|
2 | import { watch } from "./traits"; | |||
2 |
|
3 | |||
3 | interface ScheduleWidgetAttrs { |
|
4 | interface ScheduleWidgetAttrs { | |
4 | data: string[]; |
|
5 | data: string[]; | |
5 | } |
|
6 | } | |
6 |
|
7 | |||
7 | declare const w0: _WidgetBase<ScheduleWidgetAttrs>; |
|
8 | interface ScheduleWidgetEvents { | |
|
9 | "scheduled": Event & { | |||
|
10 | detail: { | |||
|
11 | startDate: Date, | |||
|
12 | endDate: Date | |||
|
13 | } | |||
|
14 | }; | |||
|
15 | } | |||
8 |
|
16 | |||
9 | w0.get("data"); |
|
17 | declare class ScheduleWidget extends _WidgetBase<ScheduleWidgetAttrs, ScheduleWidgetEvents> { | |
10 |
|
||||
11 | declare class ScheduleWidget extends _WidgetBase { |
|
|||
12 | data: string[]; |
|
18 | data: string[]; | |
13 | } |
|
19 | } | |
14 |
|
20 | |||
15 | const w = new ScheduleWidget({title: "Year schedule", data: ["a", "b"] }); |
|
21 | const w = new ScheduleWidget({title: "Year schedule", data: ["a", "b"] }); | |
16 |
|
22 | |||
17 | w.get("data"); No newline at end of file |
|
23 | w.get("data"); | |
|
24 | ||||
|
25 | w.watch((p, o, n) => [p,o,n]); | |||
|
26 | ||||
|
27 | w.watch("data", (p, o, n) => [p,o,n]); | |||
|
28 | ||||
|
29 | watch(w, "title", v => String(v) ); | |||
|
30 | watch(w, "data", v => String(v) ); | |||
|
31 | ||||
|
32 | w.emit("scheduled", { detail: { startDate: new Date(), endDate: new Date()} }); | |||
|
33 | ||||
|
34 | w.emit("click", {} ); | |||
|
35 | ||||
|
36 | w.emit("click", {} ); | |||
|
37 | ||||
|
38 | w.emit("some-extra-event", {}); | |||
|
39 | ||||
|
40 | w.on("click", e => e); | |||
|
41 | w.on("some-extra-event", e => e); |
@@ -5,6 +5,7 | |||||
5 | "rootDir": "ts", |
|
5 | "rootDir": "ts", | |
6 | "rootDirs": [ |
|
6 | "rootDirs": [ | |
7 | "ts", |
|
7 | "ts", | |
|
8 | "typings", | |||
8 | "../main/ts" |
|
9 | "../main/ts" | |
9 | ], |
|
10 | ], | |
10 | "types": [ |
|
11 | "types": [ | |
@@ -12,7 +13,8 | |||||
12 | "../main/typings/dojo/modules", |
|
13 | "../main/typings/dojo/modules", | |
13 | "../main/typings/dijit/modules" |
|
14 | "../main/typings/dijit/modules" | |
14 | ], |
|
15 | ], | |
15 |
"module": " |
|
16 | "module": "ESNext", | |
|
17 | "target": "ESNext" | |||
16 | }, |
|
18 | }, | |
17 | "include": [ |
|
19 | "include": [ | |
18 | "typings/**/*.ts", |
|
20 | "typings/**/*.ts", |
General Comments 0
You need to be logged in to leave comments.
Login now