2

我正在尝试引用使用 Resig 的“扩展”的现有代码,但我遇到了一堆错误

------ test.ts --------

/// <reference path="myclass.js" />
var m = new MyClass (3);

------ myclass.js --------

/// <reference path="class.js" />

var MyClass = Class.extend({

    init: function (i)
    {
        this.i = i;
    },
})

------ 类.js --------

(copied from http://ejohn.org/blog/simple-javascript-inheritance/)

错误:

Supplied parameters do not match any signature of call target
The name 'Class' does not exist in the current scope
The property 'extend' does not exist on value of type '() => void'
The name 'Class' does not exist in the current scope

我意识到最终我想将基于扩展的代码重写为 TypeScript,但在那之前,我如何从新代码中引用它?

我想这引出了更深层次的问题——为什么它抱怨现有 javascript 代码中的类型错误?

4

1 回答 1

3

TypeScript 通常无法从外部 JavaScript 代码推断类型。

您需要声明要调用的“扩展”代码的形状,以便 TypeScript 知道该类型的形状是什么:

declare class Class {
    static extend(body: any);
}

您可以将其直接放入源文件(如果您只有一个单文件项目),或者更准确地说,放入您从源文件引用的“.d.ts”文件中。

于 2012-10-02T17:23:55.267 回答