只能使用“new”关键字调用 void 函数

Wik*_*tor 7 javascript zurb-foundation typescript

我正在尝试通过以下方式在我的 Typescript 代码中使用 Foundation 的 Reveal 插件(为了可读性进行了更改):

var popup = new Foundation.Reveal($('#element'));
Run Code Online (Sandbox Code Playgroud)

并且我在编译过程中遇到以下错误(最终它确实编译并工作):

TS2350: Only a void function can be called with the 'new' keyword.
Run Code Online (Sandbox Code Playgroud)

那我该怎么写呢?

Typescript Playground - 说明问题的代码

ari*_*tll 6

我找到了一种关闭打字稿编译器的方法,但这将放弃类型检查(请谨慎操作)。

var popup = new (Foundation.Reveal as any)($('#element'));
Run Code Online (Sandbox Code Playgroud)

更多示例:

function User2(name) {
    if (this instanceof User2) {
        this.name = name;
    }
    else {
        return new (User2 as any)(name);
    }
}
Run Code Online (Sandbox Code Playgroud)


bas*_*rat 4

基于接口:

interface FoundationSitesStatic {
    Reveal(element:Object, options?:IRevealOptions): Reveal;
}
Run Code Online (Sandbox Code Playgroud)

new您不能使用运算符(用于调用构造函数)来调用它。

所以修复:

var popup = Foundation.Reveal($('#element'));
Run Code Online (Sandbox Code Playgroud)

  • 是的,它确实可以编译,但不起作用:)这就是我问这个问题的原因;) (5认同)
  • 我认为它是有效的 JavaScript,但在 TypeScript 中无效。这也让我感到困惑,就像 @Wiktor 一样,因为他们说 TypeScript 是 JavaScript 的超集。但现在看来,实际上并非如此。 (3认同)