Typescript默认导出未定义
我正在写一个npm模块,一个简单的记录器。我用纯JS写的: logger.jsTypescript默认导出未定义,typescript,typescript-typings,Typescript,Typescript Typings,我正在写一个npm模块,一个简单的记录器。我用纯JS写的: logger.js class Logger { // stuff } module.exports = Logger; const Logger = require('ep-logger'); const logger = new Logger('my-logger'); logger.info('yo'); import Logger from 'ep-logger'; const logger: Logger = n
class Logger {
// stuff
}
module.exports = Logger;
const Logger = require('ep-logger');
const logger = new Logger('my-logger');
logger.info('yo');
import Logger from 'ep-logger';
const logger: Logger = new Logger('my-logger');
logger.info('yo');
在js脚本中,这样做很好:
记录器测试.js
class Logger {
// stuff
}
module.exports = Logger;
const Logger = require('ep-logger');
const logger = new Logger('my-logger');
logger.info('yo');
import Logger from 'ep-logger';
const logger: Logger = new Logger('my-logger');
logger.info('yo');
但我们公司使用的是打字脚本。因此,在我的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
class Logger {
// stuff
}
module.exports = Logger;
const Logger = require('ep-logger');
const logger = new Logger('my-logger');
logger.info('yo');
import Logger from 'ep-logger';
const logger: Logger = new Logger('my-logger');
logger.info('yo');
但我得到一个错误,我的记录器没有默认导出:
export interface SplunkOptions {
//...
}
export interface LoggerOptions {
//...
}
export class Logger {
//...
}
export = Logger;
{错误:命令失败:ts node local-lambda.ts--colors
/Users/luke/Arbeit/WeltN24/editory Products/projects/ep logger tests/js app/yo lambda/src/index.ts:5
常量记录器:记录器=新记录器(“my-logger”);
^
TypeError:ep_logger_1.default不是构造函数
事实上,如果我
console.log(Logger);
我明白了
对于当前版本的typescript(2.6或更低版本),您需要使用以下内容编写定义文件,而不是使用默认导出:
export interface SplunkOptions {
//...
}
export interface LoggerOptions {
//...
}
export class Logger {
//...
}
export = Logger;
(2.7),您最初编写它的方式将开始工作(在过程中中断导出=
),最初在--strictSM
标志后面,然后从2.8开始,作为默认行为,不带任何标志