创建声明文件时我很困惑(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”(等等)。
如何在模块“b”中指定依赖关系(链接到“a.d.ts”)? 试图在“node_modules”中指定? 或者将“a.d.ts”复制到“b”包中的“/ typings /”目录? 然后将“a.d.ts”和“b.d.ts”复制到“c”包中的“/ typings /”(依此类推)?
“package.json”中的“typings”部分有什么意义? 我在“b / package.json”中写道:
“typings”:“。/ b.d.ts”
编译“c”时出错:
Exported external package typings file 'node_modules/b/b.d.ts' is not a module.
答案 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=
或手工制作的打字