【发布时间】:2016-09-02 15:29:05
【问题描述】:
我使用 tsc 编译器的 --declaration 参数从我的 typescript 项目创建了一个定义文件 (d.ts)。
但是当我尝试在 npm package.json 上发布具有属性 typings 的包时,这个生成的定义文件显然不起作用。我创建了另一个项目来测试它。
它报错:“Exported external package file typings file '...d.ts' 不是模块。请联系包作者更新包定义”。 p>
这是我的源文件:
MyInterface.ts
export interface MyInterface
{
MyProperty: string;
}
MyClass.ts
import {MyInterface} from './MyInterface';
export class MyClass implements MyInterface
{
get MyProperty(): string
{
return "MyString";
}
}
MyInheritedClass.ts
import {MyClass} from './MyClass';
export class MyInheritedClass extends MyClass
{
public MyMethod(): number
{
return 1;
}
}
tsc 命令是这样的:
tsc MyClass.ts MyInterface.ts MyInheritedClass.ts --declaration -t es5 -outFile "mydefinition.js" --module "system"
这是生成的定义:
mydefinition.d.ts
declare module "MyInterface" {
export interface MyInterface {
MyProperty: string;
}
}
declare module "MyClass" {
import { MyInterface } from "MyInterface";
export class MyClass implements MyInterface {
MyProperty: string;
}
}
declare module "MyInheritedClass" {
import { MyClass } from "MyClass";
export class MyInheritedClass extends MyClass {
MyMethod(): number;
}
}
我还有其他事情要做吗,或者生成的定义在 package.json 类型中不起作用??
更新详情:
场景是我有 2 个项目:
第一个项目是我生成库的地方,我将在其中发布到 npm,而 package.json 是我将类型属性链接到由 tsc -d 命令生成的 mydefinition.d.ts 文件的地方.
我创建的第二个项目通过添加生成的包(带有类型)来测试第一个项目。
两个项目的链接和场景的另一个链接:
https://github.com/jvitor83/typings-packagejson
我认为问题在于第一个链接中的“您的定义文件应作为外部模块编写”。 但我想知道是否有办法让生成的这些定义放在 package.json 的 typings 属性中。
重现问题:
执行“npm install”,使用 VSCode 打开并转到文件“src/test.ts”。
【问题讨论】:
-
您是否尝试过使用
typings.json? -
我的打字经验是使用 Angular2,在
package.json的scripts部分中,您声明了一个用于打字的脚本,之后您可以使用它来安装您想要的类型定义,如下所示:npm run typings -- install jasmine --ambient --save -
我没有使用 angular2。我从一个纯打字稿项目制作了一个 npm 包。将定义放在typings中,json没有区别。它已经发现了“d.ts”文件,但问题是已经通知了错误。 “导出的外部包文件类型文件'...d.ts'不是模块。请联系包作者更新包定义”
-
将模块选项从
system更改为CommonJS。
标签: node.js typescript