gpt4 book ai didi

typescript - TypeScript-为什么在编译时不知道设置为已定义对象的静态属性要定义?

转载 作者:行者123 更新时间:2023-12-03 07:39:05 25 4
gpt4 key购买 nike

我正在尝试访问类的静态属性。尝试编译时出现错误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.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| }
索引
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com