【发布时间】:2018-11-19 23:43:29
【问题描述】:
我创建了一个类装饰器来读取角度组件的权限。
decorator.ts
function permissions(object: { [key: 'read' | 'write' | 'update' | 'delete']: string }[]) {
return (ctor: Function) => {
console.log(JSON.stringify(object));
}
}
components.ts
// employee.component.ts
@permissions([{ read: 'read-unique-id' }])
@Component({
selector: 'app-employee',
templateUrl: './app-employee.component.html',
styleUrls: ['./app-employee.component.css']
})
class Employee {
constructor() { }
}
// employee-details.component.ts
@permissions([{ read: 'read-unique-id' }, { write: 'write-unique-id' }])
@Component({
selector: 'app-employee-details',
templateUrl: './app-employee-details.component.html',
styleUrls: ['./app-employee-details.component.css']
})
class EmployeeDetails {
constructor() { }
}
我应该通过在编译期间读取类名以及装饰器的权限详细信息来创建一个文件。只需一个命令即可生成以下文件。
示例:Permissions.ts
class Permissions {
static EMPLOYEE_READ = 'read-unique-id';
static EMPLOYEE_DETAILS_READ = 'read-unique-id';
static EMPLOYEE_DETAILS_WRITE = 'write-unique-id';
}
我相信我应该创建一个 Node JS 应用程序来读取所有文件并检查 @permissions 装饰器并生成上述文件。对吗?
如果是这样,有人可以帮助我实现这一目标。阅读所有 component.ts 文件并获取权限详细信息,或者有没有其他方法可以实现。
更新:我应该通过 decorator 从 component.ts 读取权限详细信息,并在 Node JS 的帮助下生成 Permissions.ts 应用程序。
【问题讨论】:
-
我很困惑。你要读取哪个文件,要生成哪个文件?
-
您可以使用正则表达式 (yikes)、github.com/mgechev/ngast、或 Angular 示意图、blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2 或任何 TypeScript AST。但目前还不清楚您希望从哪里获得像 EMPLOYEE_READ 这样的名称。无论如何,这似乎是一个类型不安全且容易出现拼写错误的环形交叉路口。
-
对不起,我已经更新了我的帖子。希望现在很清楚。
-
目前还不清楚 EMPLOYEE_DETAILS_READ 的来源。是否应该分析类名并从“EmployeeDetails”中获取“EMPLOYEE_DETAILS”部分?无论如何,上面的评论仍然适用。这可能是可能的,但解决方案会很笨拙、不可靠并且会出现不一致(可能有多个具有相同名称的类,或者具有相同权限的不同名称的类)。
-
EMPLOYEE_DETAILS_READ 将由类名 + 装饰器的键构成。即 EmployeeDetails + read => EmployeeDetails_READ.
标签: javascript node.js angular typescript decorator