如何在TypeScript声明文件中设置默认的类属性值?

14

例如,我有

declare class Foo extends Bar {
    foo: number
}

如何声明 foo 的默认值(或初始值)为60。

我尝试过:

declare class Foo extends Bar {
    foo: number = 60
}

但是我收到了一个错误,如下:

4     foo: number = 60
                    ~~

path/to/something.js/Foo.d.ts/(4,28): error TS1039: Initializers are not allowed in ambient contexts.

4
为什么在声明类时需要设置默认值? - Nitzan Tomer
好观点!我想运行时代码无论如何都会这样做。 - trusktr
哈哈,那应该就是答案了! - trusktr
类成员“undefined”的默认值是什么?它是null吗? - Code Name Jack
3个回答

29

尝试从您的类定义中删除 "declare" 关键字。使用 "declare" 将定义一个类类型,该类型仅被定义,不应该有实现。

class Foo extends Bar {
    foo: number = 60
}

2
我不是那个给你点踩的人,但我猜测可能是因为你的假设。 - Aluan Haddad

4

您的程序试图执行两个互相矛盾的任务。

  1. 它尝试声明一个类存在,但实际上是在其他地方/方式上实现的。
  2. 它试图定义该实现。

您需要确定要执行哪个任务,并通过删除初始化器或declare修饰符来相应地调整您的程序。


-6
你需要一个构造函数来设置类属性的默认值。
试试这个:
declare class Foo extends Bar {
    foo: number;
  constructor(){
   this.foo = 60;
  }  
}

更新: 经过仔细查看您的代码片段,我注意到您正在使用关键字declare,这样做您只是定义了一个类类型,而这个类类型不需要实现。

更新2: 对于此问题,类构造函数并非必需,您可以使用或不使用类构造函数来初始化属性。

如果您移除关键字declare,则应该可以正常工作。

class Foo extends Bar {
        foo: number;
      constructor(){
       this.foo = 60;
      }  
    }

3
“你需要一个构造函数来给类属性设置默认值。”这完全是错误的。 - Aluan Haddad
是的,实际上您不需要为此编写构造函数,这只是我选择的类设计方式。我更新这个信息是因为我不想让人们对此反应过度哈哈。 - Matheus Da Silva Primo
2
它怎么可能是对无物做出反应的?你提出了虚假、不相关的主张。 - Aluan Haddad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接