打字稿,声明和CommonJS

时间:2015-12-14 16:36:44

标签: typescript

创建声明文件时我很困惑(d.ts)。

例如,我创建了一个NPM包“a”(一个CommonJS模块index.ts):

export interface IPoint {
    x: number;
    y: number;
}

export default function sub(one: IPoint, two: IPoint): IPoint {
    return {
        x: one.x - two.x,
        y: one.y - two.y
    };    
}

编译并生成a.d.ts:

export interface IPoint {
    x: number;
    y: number;
}
export default function sub(one: IPoint, two: IPoint): IPoint;

据我所知,编译器无法为CommonJS生成有效的d.ts。 必须使用实用程序作为dts-generator或手动换行:

declare module "a" 
{
    export interface IPoint {
        x: number;
        y: number;
    }
    export default function sub(one: IPoint, two: IPoint): IPoint;
}

确定。现在我正在做包“b”(取决于“a”):

/// <reference path="node_modules/a/a.d.ts" />

import sub from "a"
import { IPoint } from "a"
export { IPoint }

export default function distance(one: IPoint, two: IPoint): number {
    var s = sub(one, two);
    return Math.sqrt(s.x * s.x + s.y * s.y);
}

好的,它有效。现在想要一个依赖于“b”的包“c”(等等)。

  1. 如何在模块“b”中指定依赖关系(链接到“a.d.ts”)? 试图在“node_modules”中指定? 或者将“a.d.ts”复制到“b”包中的“/ typings /”目录? 然后将“a.d.ts”和“b.d.ts”复制到“c”包中的“/ typings /”(依此类推)?

  2. “package.json”中的“typings”部分有什么意义? 我在“b / package.json”中写道:

    “typings”:“。/ b.d.ts”

  3. 编译“c”时出错:

    Exported external package typings file 'node_modules/b/b.d.ts' is not a module.
    
    1. 如何为CommonJS模块创建d.ts文件? 所以不要手动编写“声明模块”,“参考”等等。

1 个答案:

答案 0 :(得分:7)

  

据我所知,编译器无法为CommonJS生成有效的d.ts。必须使用实用程序作为dts-generator或手动换行:

实际上没有(自1.6起)。

简单地编译模块a,将declaration标记传递给tsc。 转换器将为您生成声明文件。

你说得对,这些文件不是外部定义文件,而是内部定义文件

<强>然而

模块b将能够自动查找和使用这些文件,如果在模块a的package.json中,typings条目指向生成的index.d.ts档案

回顾一下:

模块a:

  • 使用declaration标志
  • 进行复合
  • 更新typings条目以指向生成的.d.ts文件

模块b:

  • 只需import * as moduleA from 'a'import {IPoint} from module 'a'

没有笨拙///<reference=或手工制作的打字