我正在尝试访问类的静态属性。尝试编译时出现错误Object is possibly 'undefined'
。为什么设置为已定义对象的静态属性在编译时未知?
我在自己的文件中定义了三个类:
DirectoryContents.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.ts01| 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| }
索引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| }
在RootDirStructure.ts
的第15行,其静态属性被设置为已定义的对象。但是,当在Index.ts
的第6行上引用该对象时,它将创建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);
}
}
我仍然很感兴趣,想知道为什么以前我得到了错误。我更喜欢原始语法。
关于typescript - TypeScript-为什么在编译时不知道设置为已定义对象的静态属性要定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65446191/