如何在typescript中定义x.y形式的界面?

时间:2018-01-01 16:08:42

标签: typescript

我想扩展我的lib的原型,lib是用JavaScript编写的。

就像我有一个模块X,以及一个Y类。

我想要的是将Y扩展为:

X.Y.prototype.method = function() { ... }

这将在纯JavaScript中运行,但在typescript中,它会抛出错误。我似乎需要通过以下方式为Y模块添加接口:

interface X.Y {
    method(): any
}

但是,它会抛出以下错误:

error TS1005: '{' expected.
error TS1005: ';' expected.

我不知道这个...... 谁能帮我 ?谢谢!

更新

这是一个最小的演示:

// index.html
<!doctype html>
<html>
    <head>
        <script src="./x.js"></script>
    </head>
    <body>
        <script src="./app.js"></script>
    </body>
</html>


// x.js
var x = {
    y: function() { }
}

// x.d.ts
declare module x {
    export class y {}
}

// app.ts
interface x.y {
  test: () => void
}

x.y.prototype.test = function() {

}

1 个答案:

答案 0 :(得分:1)

可能这样的事情会有所帮助

// let's pretend this is our original lib
const X = function () { };


type ExtendedProto = {
  new (): {
    test: (arg1: string) => void;
  }
};

const Y = X as typeof X & ExtendedProto;

Y.prototype.test = function(arg1: string) {
  // console.log('test');
}

const y = new Y();
y.test('1');

或者您可以使用大致以下

创建index.d.ts文件
// index.d.ts
declare module 'x-y-z' {
  export class X {}
}

// .ts file
import { X } from 'x-y-z';

class Y extends X {
   test() { console.log('test'); }
}

const y = new Y();
y.test();