TypeScript:引用resig的扩展

时间:2012-10-02 16:47:59

标签: typescript

我正在尝试引用使用Resig的'extend'的现有代码,但是我遇到了一堆错误

------ 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;
    },
})

------ class.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代码中的类型错误?

1 个答案:

答案 0 :(得分:3)

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

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

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

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