【问题标题】:TypeScript interfaces that are used to "new" objects用于“新”对象的 TypeScript 接口
【发布时间】:2012-11-04 11:28:30
【问题描述】:

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

无论如何,假设我们有 JS 代码:

var foo = new THREE.Vector3(0,0,0);

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

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

declare var THREE: IThreeJS;

但是,如您所见,我们从 Vector3 返回了 ': any'。如果我创建一个 IVector3 接口并尝试执行“new THREE.Vector3(0,0,0): IVector3”,我们会得到一个“构造函数上有效的新表达式”。因此必须返回“任何”

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

var foo: IVector3 = new THREE.Vector3(0,0,0);

那么,我的 IThreeJS 接口的 Vector3 方法是否有一个构造函数并返回一个 IVector3?

【问题讨论】:

    标签: typescript


    【解决方案1】:
    export class Vector3 {
    
      x: number;
      y: number;
      z: number;
    
    
      constructor(x, y , z) {
        this.x = x;
        this.y = y;
        this.z = z;
      }
    
    }
    

    const position = new Vector3(0, 0, 0);

    祝你好运

    【讨论】:

      【解决方案2】:

      你也可以声明类和模块:

      declare module THREE {
          export class Vector3 {
              constructor(x: number, y: number, z: number);
          }
      }
      

      【讨论】:

      • 哦,是的,如果我从头开始构建库,这将是一个合适的解决方案。我指的是创建一个接口,该接口位于一个已经在 J​​avaScript 中完成的预先存在的库之上。这一切都是为了在我的 TypeScript 应用程序中更轻松地使用 JS 库。
      • 这就是史蒂夫的代码所做的。 declare 关键字的意思是“我正在描述一个在别处实现的对象”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2016-08-06
      • 2019-11-26
      • 2020-05-02
      • 2021-07-31
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多