0

我们在VS2012中创建一个typescript项目,并定义typescript的接口。然后我们添加接口的实现和一些业务逻辑来使用接口。在 VS 中,我们将项目编译为打字稿的定义文件。并且描述文件中存在编译错误,我们检查错误并罚款该接口不包含在项目的描述文件中。

我们的问题: 当我们将多个 TypeScript 文件编译成一个文件时,有没有办法将接口包含在 TypeScript 的描述文件中?

4

3 回答 3

4

也为您的接口声明文件使用 a.ts而不是 a 。.d.ts

您可以在此处查看示例:https ://github.com/basarat/ts-test/tree/master/tests/compileToSingle

我的out.d.ts https://github.com/basarat/ts-test/blob/master/tests/compileToSingle/out.d.ts 包含来自 dec .ts的接口:https ://github.com/basarat /ts-test/blob/master/tests/compileToSingle/dec.ts

我的out.d.ts不包含接口:https ://github.com/basarat/ts-test/blob/34eeb54618e57765ea0e2f9ce0c48ebd7f46942a/tests/compileToSingle/out.d.ts 如果我有一个 dec。d.tshttps ://github.com/basarat/ts-test/blob/34eeb54618e57765ea0e2f9ce0c48ebd7f46942a/tests/compileToSingle/dec.d.ts

您可以将 declare 关键字用于仅声明的任何项目,即:

declare class C{

}

代替

class C{

}

接口将保持原样,并且不使用 declare 关键字。

于 2013-05-21T23:58:15.743 回答
2

根据您的问题,我做出以下假设。

  • 您正在使用--out标志编译 TypeScript 以获取单个输出文件
  • 您正在使用--declaration标志生成定义
  • 您在一个文件中有一个接口,在另一个文件中有一个实现

如果是这种情况,您的界面应该出现在声明文件中。这是一个例子。

示例代码

接口文件.ts

// Interface
interface IPoint {
    getDist(): number;
}

实现文件.ts

/// <reference path="InterfaceFile.ts" />

// Module
module Shapes {

    // Class
    export class Point implements IPoint {
        // Constructor
        constructor (public x: number, public y: number) { }

        // Instance member
        getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); }

        // Static member
        static origin = new Point(0, 0);
    }
}

应用程序.ts

/// <reference path="ImplementationFile.ts" />

// Local variables
var p: IPoint = new Shapes.Point(3, 4);
var dist = p.getDist();

编译和输出

如果我使用以下命令编译此示例程序:

tsc --out mylib.js --declaration app.ts

我在 mylib.d.ts 中得到以下信息

interface IPoint {
    getDist(): number;
}
module Shapes {
    class Point implements IPoint {
        public x: number;
        public y: number;
        constructor(x: number, y: number);
        public getDist(): number;
        static origin: Point;
    }
}
var p: IPoint;
var dist: number;
于 2013-05-22T08:00:56.837 回答
0

我认为您两者都有<TypeScriptOutFile>something.js</TypeScriptOutFile>,并<TypeScriptGeneratesDeclarations>true</TypeScriptGeneratesDeclarations>在您的 csproj 文件中定义。从我的 TypeScript 版本 0.8.3.1(我假设是 0.9)开始,任何从包含文件(而不是在 .d.ts 文件中)引用的接口也将被包含在内。只需在其中一个文件中添加对缺少接口的引用并重新编译即可。引用不必在该文件中实际使用。

于 2013-05-21T15:34:44.037 回答