“ dd-trace”库的类型定义在“ @ types / dd-trace”中,导出单个变量。
declare var trace: TraceProxy;
export = trace;
declare class TraceProxy extends Tracer {
/**
* Initializes the tracer. This should be called before importing other libraries.
*/
init(options?: TracerOptions): this;
// A bunch of other irrelevant code.
}
如何将其导入代码中?如果我不正确地尝试将ddTrace.init()分配给布尔值,TypeScript会告诉我类型为“ TraceProxy”。但是,我尝试了所有可能出现的变化:
import { TraceProxy } from "dd-trace"
失败node_modules/@types/dd-trace"' has no exported member 'TraceProxy'.
import { init, trace } from "dd-trace"
const tracer: trace = init()
导入成功,但是声明失败:3:15: cannot find name "trace"
所有这些变体均会失败:
const tracer: trace.trace = init()
const tracer: trace.TraceProxy = init()
const tracer: trace.Tracer = init()
const tracer: TraceProxy = init()
const tracer: Tracer = init()
导入模块失败:
import * as ddTrace from "dd-trace"
const tracer: ddTrace = ddTrace.init()
第3行带有Cannot find name 'ddTrace'.
,
这些也失败了:
import * as ddTrace from "dd-trace"
const tracer: ddTrace.TraceProxy = ddTrace.init()
与Cannot find namespace 'ddTrace'.
一个建议的答案(已删除)是:
import trace from "dd-trace"
const tracer: trace = trace.init()
此操作失败,并显示:@types/dd-trace/index"' has no default export.
如何在那里声明类型定义?我正在使用最新版本的TypeScript并通过运行./node_modules/.bin/tsc myfile.ts
进行编译。
答案 0 :(得分:1)
从模块导出的内容实际上是跟踪程序本身。调用tracer.init()
只是初始化跟踪程序并返回自身。这意味着您无需创建新变量。
这应该有效:
import * as ddTrace from "dd-trace";
const tracer = ddTrace;
tracer.init();
// continue to use "tracer" for example "tracer.startSpan()" etc
如果您正在使用我们的任何集成,还要注意的一件事是,初始化应在单独的文件中进行,以避免吊起。
例如:
// server.ts
import tracer from "./tracer";
import * as express from "express"; // or any other modules
// tracer.ts
import * as tracer from "dd-trace";
tracer.init();
export default tracer;
这样做是为了确保在导入任何检测到的模块之前初始化跟踪器。
如果您实际上不在应用程序入口点中使用跟踪器,只需将import tracer from "./tracer"
替换为import "./tracer"
。