typescript - TypeScript - 为什么设置为已定义对象的静态属性在编译时未知?
问题描述
我正在尝试访问一个类的静态属性。Object is possibly 'undefined'
当我尝试编译它时出现错误。为什么要定义在编译时未知的设置为已定义对象的静态属性?
我在自己的文件中定义了三个类:
目录内容.ts
export class DirectoryContents
{
public readonly directories: ReadonlyArray<string>;
public readonly files: ReadonlyArray<string>;
public constructor(directories: ReadonlyArray<string>, files: ReadonlyArray<string>)
{
this.directories = directories;
this.files = files;
}
}
RootDirStructure.ts
01| import {DirectoryContents} from "./DirectoryContents";
02| import ReadOnlyDict = NodeJS.ReadOnlyDict;
03|
04| export class RootDirStructure
05| {
06| private static readonly REQUIRED_NPM_DIRECTORIES: ReadonlyArray<string> =
07| ["node_modules"];
08|
09| private static readonly REQUIRED_NPM_FILES: ReadonlyArray<string> =
10| ["package.json", "package-lock.json"];
11|
12| // RootDirStructure.required.npm set to defined object
13| public static readonly required: ReadOnlyDict<DirectoryContents> =
14| {
15| npm: new DirectoryContents(RootDirStructure.REQUIRED_NPM_DIRECTORIES, RootDirStructure.REQUIRED_NPM_FILES)
16| }
17| }
索引.ts
01| import {RootDirStructure} from "./RootDirStructure";
02|
03| class Index
04| {
05| // The following reference to RootDirStructure.required.npm causes error
06| const requiredNPMDirectories: ReadonlyArray<string> = RootDirStructure.required.npm.directories;
07| }
在第 15 行RootDirStructure.ts
,它的静态属性被设置为一个已定义的对象。然而,当在第 6 行引用该对象时Index.ts
,它会产生Object is possibly 'undefined'
错误。
既然它是一个静态属性,其值应该在编译时就知道,为什么要定义一个设置为在编译时不知道的已定义对象的静态属性呢?
解决方案
我能够通过重写来修复它RootDirStructure.ts
。
我将静态属性RootDirStructure.required
设置为静态内部类,而不是具有类型的属性,ReadOnlyDict<DirectoryContents>
所以现在RootDirStructure.ts
看起来像:
import {DirectoryContents} from "./DirectoryContents";
export class RootDirStructure
{
private static readonly REQUIRED_NPM_DIRECTORIES: ReadonlyArray<string> =
["node_modules"];
private static readonly REQUIRED_NPM_FILES: ReadonlyArray<string> =
["package.json", "package-lock.json"];
// RootDirStructure.required.npm set to defined object
public static readonly required = class
{
public static readonly npm: DirectoryContents = new DirectoryContents(RootDirStructure.REQUIRED_NPM_DIRECTORIES, RootDirStructure.REQUIRED_NPM_FILES);
}
}
我仍然很感兴趣,想知道为什么我之前收到了错误。我更喜欢原始语法。
推荐阅读
- html - 将不同域的 iframe 添加到 Wordpress,无需滚动和 100% 高度
- spring-boot - 无法访问 Kubernetes 服务
- javascript - 如何在 React 应用程序中包含纯 JavaScript?
- tensorflow - 在 Windows 10 上使用 bazel 0.29.1 构建 TensorFlow 2 失败
- c# - 如何在字符串插值C#中保留空值
- c - 显示从 4 位数字到 Kaprekar 常数的过程的程序无限循环
- heroku - Heroku - 多个测功机
- xamarin - 如何将数据从 xamarin 共享项目传递到 html
- apache-kafka - Apache Kafka 分区保证消息的顺序
- apache-poi - 需要在页面末尾插入文本但表格仍在下一页继续