Как импортировать определение Typescript, которое экспортирует одну переменную - PullRequest
0 голосов
/ 30 января 2019

Определение типа для библиотеки "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()

с Cannot find name 'ddTrace'. в строке 3.

Также не удалось:

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 голосов
/ 31 января 2019

Экспорт из модуля на самом деле сам трассировщик.Вызов 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".

...