Browse Source

KERNEL-1211 feat: 基础装饰类定义

es6
iapyang 5 years ago
parent
commit
0734973b72
  1. 4
      tsconfig.json
  2. 96
      typescript/index.ts

4
tsconfig.json

@ -12,8 +12,8 @@
"experimentalDecorators": true,
"outDir": "./bin",
"baseUrl": ".",
"strict": true,
"strictNullChecks": true,
// "strict": true,
// "strictNullChecks": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"noUnusedParameters": true,

96
typescript/index.ts

@ -13,23 +13,93 @@ import { _HighlightBehavior } from "./core/behavior/behavior.highlight";
import { _RedMarkBehavior } from "./core/behavior/behavior.redmark";
type Constructor<T extends {}> = T & {
type ClassConstructor<T extends {}> = T & {
new(config: any): T;
(config: any): T;
readonly prototype: T;
}
export interface _BI extends _func, _i18n, _base {
OB: Constructor<_OB>;
Widget: Constructor<_Widget> & _WidgetStatic;
Single: Constructor<_Single>;
BasicButton: Constructor<_BasicButton>;
Trigger: Constructor<_Trigger>;
Action: Constructor<_Action>;
ActionFactory: Constructor<_ActionFactory>;
ShowAction: Constructor<_ShowAction>;
Behavior: Constructor<_Behavior>;
BehaviorFactory: Constructor<_BehaviorFactory>;
HighlightBehavior: Constructor<_HighlightBehavior>;
RedMarkBehavior: Constructor<_RedMarkBehavior>;
OB: ClassConstructor<_OB>;
Widget: ClassConstructor<_Widget> & _WidgetStatic;
Single: ClassConstructor<_Single>;
BasicButton: ClassConstructor<_BasicButton>;
Trigger: ClassConstructor<_Trigger>;
Action: ClassConstructor<_Action>;
ActionFactory: ClassConstructor<_ActionFactory>;
ShowAction: ClassConstructor<_ShowAction>;
Behavior: ClassConstructor<_Behavior>;
BehaviorFactory: ClassConstructor<_BehaviorFactory>;
HighlightBehavior: ClassConstructor<_HighlightBehavior>;
RedMarkBehavior: ClassConstructor<_RedMarkBehavior>;
}
interface Obj {
[key: string]: any;
}
declare let BI: Obj & _BI;
declare const Fix: Obj;
export type Constructor<T> = new(...args: any[]) => T;
/**
* widget
*/
export function shortcut () {
return function decorator<U> (Target: Constructor<U> & {xtype: string}): void {
BI.shortcut(Target.xtype, Target);
};
}
/**
* model
*/
export function model () {
return function decorator<U extends {new (...args:any[]):{}} & {xtype: string, context?: ReadonlyArray<string>}>(Target: U): void {
BI.model(Target.xtype, class extends Target {
context = Target.context;
});
};
}
/**
* _store属性
* @param Model model类
* @param opts
*/
export function store<T> (Model?: Constructor<T> & {xtype: string}, opts: { props?(this: unknown): { [key: string]: unknown } } = {}) {
return function classDecorator<U extends {new (...args:any[]):{}}>(constructor:U) {
return class extends constructor {
_store () {
const props = opts.props ? opts.props.apply(this) : undefined;
return BI.Models.getModel(Model.xtype, props);
}
};
};
}
/**
* Model基类
*/
export class Model<U extends {types?: {[key: string]: any}, context?: ReadonlyArray<string>} = {}> extends Fix.Model {
model: Pick<{[key in keyof U["types"]]: U["types"][key]}, U["context"][number]> & {[key in keyof ReturnType<this["state"]>]: ReturnType<this["state"]>[key]} & {[key in keyof this["computed"]]: ReturnType<this["computed"][key]>} & {[key: string]: unknown};
store: this["actions"];
state (): {[key: string]: any} {
return {};
}
context: U["context"];
actions:{[key: string]: (...args: any[]) => any};
childContext: ReadonlyArray<keyof (this["computed"] & ReturnType<this["state"]>)>;
TYPE: Pick<{[key in keyof this["computed"]]: ReturnType<this["computed"][key]>} & {[key in keyof ReturnType<this["state"]>]: ReturnType<this["state"]>[key]}, this["childContext"][number]>;
computed: {[key: string]: () => any};
}

Loading…
Cancel
Save