2016-09-29 43 views
2

在我的TypeScript项目中,我想使用Logdown现有节点模块的TypeScript定义文件

Logdown可以使Node.js应用程序中使用这样的:

var Logdown = require('logdown') 
var logger = new Logdown({prefix: 'test'}) 
logger.info('Hello World'); 

不幸的是,Logdown不提供报关单,所以我想写一个声明文件。

与Kickstart这个小项目,我做了以下内容:

  • 我克隆Logdown库
  • 我创造了package.json文件克隆Logdown库的“分型”项,并指出它做dist/logdown.d.ts (据 “Including declarations in your npm package”)
  • 我做了我TypeScrip内的克隆Logdown库当地现有的NPM包(npm link
  • 我跑npm link logdown科技应用到这个节点模块的参考点到我的克隆库

之后,我创建了logdown.d.ts文件中的内容:

export declare class Logdown { 
    constructor(options: Object); 
    public info(text: string): string; 
} 

我希望我可以在我的打字稿项目现在使用Logdown像这样的:

import Logdown = require("logdown"); 
let logger: Logdown = new Logdown(); 
logger.info('Hello World!'); 

但是,当我编译项目,我得到了以下错误:

错误TS2304:找不到名称'Logdown'。

错误TS2351:不能对类型缺少调用或构造签名的表达式使用'new'。

+0

这可能是一个简单的拼写错误:它的拼写''在包types' .json',而不是'typings'。此外,这不适用于2.0以上的打字稿。 – artem

+0

设置没问题。请注意,“类型”字段与“类型”同义。我认为问题出现在'logdown.d.ts'中。 –

回答

5

我得到它的工作:我需要导出的格式更改为export = Logdown;在我的打字稿应用程序定义文件(.d.ts)和进口格式import Logdown = require("logdown");

Logdown.d.ts(导出定义)

declare class Logdown { 
    constructor(options?: Object); 
    public log(...args: string[]): void; 
    public info(...args: string[]): void; 
    public warn(...args: string[]): void; 
    public debug(...args: string[]): void; 
    public error(...args: string[]): void; 
    public static disable(...args: string[]): void; 
    public static enable(...args: string[]): void; 
} 

export = Logdown; 

打字稿应用(进口)

import Logdown = require("logdown"); 
... 
let logger: Logdown = new Logdown(); 
logger.info('Hello from Logdown!'); 
相关问题