【问题标题】:TypeScript class with null properties when initializing初始化时具有空属性的 TypeScript 类
【发布时间】:2021-02-16 18:39:14
【问题描述】:

我已经使用带有npx create-next-app --example with-typescript with-typescript-app (https://github.com/zeit/next.js/tree/master/examples/with-typescript) 的打字稿开始了一个新的 Next.js 项目。

当我尝试创建这样的类时:

export class Programm {
    id: string;
    name: string;
    thumbnailUrl: string;
}

我收到语法错误:

Property 'id' has no initializer and is not definitely assigned in the constructor.ts(2564)

当我添加这样的构造函数时:

constructor(id: string, name: string, thumbnailUrl: string) {
    this.id = id;
    this.name = name;
    this.thumbnailUrl = thumbnailUrl;
}

它有效。为什么会这样?如何创建一个对象,以便在初始化类时属性为空?

在没有构造函数的情况下,相同的代码也可以工作

【问题讨论】:

标签: typescript


【解决方案1】:

您可以使用? 修饰符将属性定义为可选:

export class Programm {
     id?: string;
     name?: string;
     thumbnailUrl?: string;
}

现在,如果您初始化“Programm”类型的新实例,属性将具有undefined 值。

【讨论】:

  • 或者你可以将类型与未定义的id: string | undefined;联合
【解决方案2】:

我认为您可以按照以下步骤操作 -> 然后按照@Mr.Jurica Smircic 解决方案 -> 定义初始值

constructor(id: string, name: string, thumbnailUrl: string) {
    this.id = id || '' ;
    this.name = name || '';
    this.thumbnailUrl = thumbnailUrl || '';
}

堆栈中有很多关于为什么不应该使用 null 或 undefined 的讨论。 他们总是鼓励通过构造函数或在对象初始化期间定义初始值。例如空对象。为了更好地理解,您可以查看这些Q&A 线程。 谢谢

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2023-01-18
    • 2020-03-05
    • 1970-01-01
    • 2021-11-21
    • 2017-09-29
    • 2018-05-15
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多