angular - Angular 私有内部接口(又名 Typescript 嵌套类)
问题描述
如何在 Angular 指令中使用嵌套接口?
在 Java 中,我发现静态嵌套类是组织代码的好方法。我想在 Typescript/Angular 中做同样的事情,但无法完成所有设置。
下面的代码接近工作。但是我在是否导出命名空间时遇到问题
如果我这样做,那么我不能在包含它的模块中声明该指令。我收到以下警告:
MyDirective 没有在任何 Angular 模块中声明。
如果我不这样做,那么MyDirective.DirectiveOptions
由于以下错误,我在键入对象时遇到了麻烦:
TS2702:“MyDirective”仅指一种类型,但在此处用作命名空间。
我的指令
@Directive({
selector: '[appMyDirective]'
})
export class MyDirective implements OnInit {
defaultDirectiveOptions: MyDirective.DirectiveOptions = {
callback: () => {console.log('default callback called')}
};
@Input('appMyDirective')
directiveOptions: MyDirective.DirectiveOptions = {};
ngOnInit(): void {
this.directiveOptions = {...this.defaultDirectiveOptions, ...this.directiveOptions};
}
}
// Seems like a dumb way to nest an interface, but whatever.
export namespace MyDirective {
export interface DirectiveOptions {
callback?: () => void;
}
}
文件中的其他地方foo.component.ts
:
options: MyDirective.DirectiveOptions = {
callback: ()=>{
console.log('Overridden callback called');
}
}
解决方案
因此,您使用一个名称创建名称空间和类。请注意,Angular 会编译为 JavaScript。并且 JS 没有类和命名空间。所有的东西都会编译成函数。这就是为什么你会收到这样的信息。
推荐阅读
- node.js - 带有 Insomnia 的 Express POST 请求 - req.body 返回 {}
- java - Could not call an object without any arguments in it
- python - 在运行运行服务器时,不断在我的数据库中加载新数据
- python - Blank value when passing values between class on kivy?
- javascript - Set select option by index
- java - 从终端 JDB 调试 libgdx 应用程序
- r - How to filter a database on other data
- java - 处理身份验证弹出窗口中的问题
- assembly - Cortex M4: cmp instruction broken?
- java - .map 和原始对象内容的变异