如何导入导出单个变量的 Typescript 定义

How to import Typescript definition that exports a single variable

"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.

进行编译

模块的导出实际上是跟踪器本身。调用 tracer.init() 只是初始化跟踪器和 returns 本身。这意味着您不需要创建新变量。

这应该有效:

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"