用于"新"对象的TypeScript接口

N. *_*len 3 typescript

首先,这个问题首先出现在使用Three.js之后,我尝试/尝试为我自己的库构建接口.

无论如何,让我们说我们有JS代码:

var foo = new THREE.Vector3(0,0,0);
Run Code Online (Sandbox Code Playgroud)

在TypeScript中,您可以将THREE对象表示为:

interface IThreeJS {
    Vector3(x: number, y: number, z: number): any;
}

declare var THREE: IThreeJS;
Run Code Online (Sandbox Code Playgroud)

但是你可以看到我们从Vector3返回':any'.如果我创建一个IVector3接口并尝试执行'new THREE.Vector3(0,0,0):IVector3',我们会得到一个'关于构造函数的有效的新表达式'.因此必须返回'任何'

现在唯一的选择是让IThreeJS的Vector3对象返回'any'并执行:

var foo: IVector3 = new THREE.Vector3(0,0,0);
Run Code Online (Sandbox Code Playgroud)

那么,无论如何让我的IThreeJS接口的Vector3方法有一个构造函数并返回一个IVector3?

Fen*_*ton 6

您也可以声明类和模块:

declare module THREE {
    export class Vector3 {
        constructor(x: number, y: number, z: number);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是史蒂夫的代码所做的.`declare`关键字表示"我正在描述在别处实现的对象" (3认同)