我正在编写一个npm模块,一个简单的记录器。我用简单的JS写了这个:
logger.js
class Logger {
// stuff
}
module.exports = Logger;
在js脚本中,这很好用:
记录器-test.js
const Logger = require('ep-logger');
const logger = new Logger('my-logger');
logger.info('yo');
但我们公司使用 TypeScript 。因此,在logger.js
旁边,我创建了一个文件logger.d.ts
,内容如下
export interface SplunkOptions {
endpoint?: string
loggingSource?: string
loggingSourceType?: string
}
export interface LoggerOptions {
stage?: string
level?: string
splunk?: SplunkOptions
}
export default class Logger {
constructor(name: string);
public static setOptions(obj: LoggerOptions): void;
public error(message: string | Error, ...data: any[]): void;
public warn(message: string | Error, ...data: any[]): void;
public info(message: string | Error, ...data: any[]): void;
public verbose(message: string | Error, ...data: any[]): void;
public debug(message: string | Error, ...data: any[]): void;
public silly(message: string | Error, ...data: any[]): void;
}
在package.json
我做了这个:
{
// more package.json stuff here
"main": "src/logger.js",
"types": "src/logger.d.ts"
}
现在在我的 TypeScript - 项目中我正在尝试使用我的记录器:
index.ts
import Logger from 'ep-logger';
const logger: Logger = new Logger('my-logger');
logger.info('yo');
但是我得到一个错误,我的记录器没有默认导出:
{错误:命令失败:ts-node local-lambda.ts --colors
/ Users / luke / Arbeit / WeltN24 / Editorial Products / projects / ep-logger-tests / js-app / yo-lambda / src / index.ts:5 const logger:Logger = new Logger('my-logger'); ^ TypeError:ep_logger_1.default不是构造函数 ...
事实上,如果我这样做
console.log(Logger);
我得到了
undefined
答案 0 :(得分:1)
使用当前版本的typescript(2.6或更低版本),您需要使用export assignment而不是默认导出来编写定义文件:
export interface SplunkOptions {
//...
}
export interface LoggerOptions {
//...
}
export class Logger {
//...
}
export = Logger;
It seems like the plan is to change all that in the next version(2.7),你最初编写它的方式将开始工作(在此过程中打破export =
),最初在--strictESM
标志后面,然后从2.8开始,作为没有任何标志的默认行为。