我正在尝试为节点中的winston-syslog(direct link to main file)手动创建类型,但是遇到了问题。当我创建以下定义时:
// File: src/types/winston-syslog/index.d.ts
declare module 'winston-syslog' {
import * as Transport from 'winston-transport';
export interface SyslogTransportOptions extends Transport.TransportStreamOptions {
host?: string;
port?: number;
path?: string;
protocol?: string;
pid?: number;
facility?: string;
localhost?: string;
type?: string;
app_name?: string;
eol?: string;
levels?: {[key: string]: number};
}
export interface Syslog extends Transport {
new(options?: SyslogTransportOptions): Syslog;
}
}
我无法创建Syslog实例,因为Typescript失败并显示以下错误:
错误TS2693:“ Syslog”仅引用一种类型,但在此处被用作值。
这是我的(大大减少的)主文件:
// File: src/Log.ts
import {Syslog, SyslogTransportOptions} from 'winston-syslog';
const transportOptions = {/* some values here */};
const syslogTransport = new Syslog(transportOptions);
我猜我定义Syslog类的方式有问题,但这正是在winston内部完成的方式。
答案 0 :(得分:2)
系统日志是“ winston-syslog”软件包中的一个实例,而不是接口。您可以在单独的* .d.ts文件中编写稍微不同的类型定义。
declare module "winston-syslog" {
export interface ISyslog {
new (options: any): ISyslog;
log(message: string): void;
}
export const Syslog: ISyslog;
}
然后,您可以像这样使用键入内容:
import * as Test from "winston-syslog";
const t = new Test.Syslog({}); // The type is ISyslog
t.log("blabla");