1
クラスコードを改良するために、Typescriptを使ってクラス・デコレータをmixinsとして使用するのがよいと思っています。this質問は私が探しているものですが、 'Not Possible 「私はハックし始めた。TypescriptクラスのデコレータをMixinsとして使用する
結果は、この作業コード
declare type Constructor<T = {}> = new(...args: any[]) => T
//Permissions function runs when @Permissions is placed as a class decorator
export function Permissions<TBase extends Constructor>(Base:TBase) {
return class extends Base {
read: boolean = false;
edit: boolean = false;
admin: boolean = false;
constructor(...args: any[]) {
super(...args);
this.read = false;
this.edit = false;
this.admin = false;
}
isRead(): boolean {
return this.read;
}
isEdit(): boolean {
return this.edit;
}
isAdmin(): boolean {
return this.admin;
}
setRead(value: boolean): void {
this.read = value;
}
setEdit(value: boolean): void {
this.edit = value;
}
setAdmin(value: boolean): void {
this.read = value
this.edit = value
this.admin = value
}
}
}
// Interface to provide TypeScript types to the object Object
export interface IPermissions {
read: boolean;
edit: boolean;
admin: boolean;
constructor(...args: any[]);
isRead(): boolean;
isEdit(): boolean;
isAdmin(): boolean
setRead(value: boolean): void
setEdit(value: boolean): void
setAdmin(value: boolean): void
}
//Extends the User Object with properties and methods for Permissions
interface User extends IPermissions {}
//Class Decorator
@Permissions
class User {
name: string;
constructor(name: string, ...args: any[]) {
this.name = name;
}
}
// Example instantiation.
let user = new User("Nic")
user.setAdmin(true);
console.log(user.name + ": has these Permissions; Read: " + user.isRead() + " Edit: " + user.isEdit() + " Admin: " + user.isAdmin())
私はインターフェイスに関係している必要があり質問です。私はPermissions関数からインターフェイス定義を動的に作成したいと思います。だから私が本当に必要とするのは、ユーザオブジェクトに適切なタイプを得るためにパーミッション関数を変更することです。
これはTypeScriptでそれを行う方法ですか?