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

时间:2019-01-30 20:46:40

标签: typescript types datadog

“ 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进行编译。

1 个答案:

答案 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"