typescript - 在泛型类中定义嵌套对象的正确方法是什么?
问题描述
我想在我的SidenavOptions
类中定义嵌套对象。
export class SidenavOptions {
autoWidth: boolean;
container: {
styles: {
width: string,
height: string,
backgroundColor: string,
}
};
}
并在我的组件中使用,例如:
bindOptions(): SidenavOptions {
this.hasOptions = new SidenavOptions();
this.hasOptions.container.styles.backgroundColor = "black";
debugger
return this.hasOptions;
}
它在浏览器控制台中显示错误:
我在这里做错了什么?
解决方案
我猜strictPropertyInitialization
你true
的tsconfig.json
. 如果已设置,您应该会看到此类型错误:
属性“容器”没有初始值设定项,也没有在构造函数中明确分配。(2564)
您所做的只是设置类属性的类型,但实际上并没有设置值。所以当你打电话时this.hasOptions.container.styles
,container
是未定义的,所以你会崩溃。
您需要使用值实际初始化您的类。如果您添加一个类似于以下内容的构造函数:
constructor() {
this.autoWidth = true
this.container = {
styles: {
width: '100px',
height: '100px',
backgroundColor: 'red'
}
}
}
然后它应该像你期望的那样工作:
const options = new SidenavOptions()
options.container.styles.backgroundColor = 'black'
// works!
推荐阅读
- python - Python 函数类和 __init__
- java - 如何在 getter 方法中将 Date 对象转换为 LocalDateTime?
- r - 为什么 [^ -~] 和 [^\\u0000-\\u007f] 匹配不同?
- internet-explorer - 是否有使用 VBScript 使用 IE 打开新的 Ikognito 选项卡的命令?
- c++ - 为什么 Intellisense with Emscripten 找不到 SDL2/SDL.h 的包含路径?
- c - 如何将两个字符串连接到第三个字符串,但在特殊位置,偶数和奇数?
- wso2 - Cannot configure X509 Certificate Authenticator with deployment.toml
- google-sheets - How do I have a hyperlink in one cell specific to a dropdown option?
- javascript - How to show particular Text Lines in Italic format in the TextArea Tag in SAP Fiori Apps?
- laravel - Laravel echo:频道授权