Машинопись tsc --declaration - PullRequest
       8

Машинопись tsc --declaration

0 голосов
/ 30 апреля 2018

Когда я генерирую свой файл определения ".d.ts" с tsc --declaration или с объявлением tsconfig.json true, генерируемые файлы не включают

объявить модуль "mymodule" {... }

Это не проблема для "vscode", но "tslint", кажется, имеет проблемы и предупреждает меня "Небезопасное использование выражения типа 'any'". например файл "test.ts":

type PromiseResolve<T> = (value?: T | PromiseLike<T> | undefined) => void;


export async function delay(timeout: number): Promise<boolean> {
    return new Promise((resolve: PromiseResolve<boolean>): void => {
        setTimeout(() => { resolve(true); }, timeout);
    });
}

сгенерирует

export declare function delay(timeout: number): Promise<boolean>;

но мне нужно:

declare module "mymodule"
{
export declare function delay(timeout: number): Promise<boolean>;
}

Как я могу получить 'объявление модуля "mymodule" {……}' в верхней части моего сгенерированного .d.ts? Или как заставить tslint работать без этой декларации?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Подробнее:

  • Мне нужно использовать модуль "commonJS" для моих API определения модуля (не могу использовать систему)

  • У меня есть эти файлы:

file1.ts:

type PromiseResolve<T> = (value?: T | PromiseLike<T> | undefined) => void;


export async function delay(timeout: number): Promise<boolean> {
    return new Promise((resolve: PromiseResolve<boolean>): void => {
        setTimeout(() => { resolve(true); }, timeout);
    });
}

file2.ts:

export function isNumberArray(param: number[] | undefined): param is number[] {
    if (typeof param === "undefined") {
        return (false);
    }
    if (!Array.isArray(param)) {
        return false;
    }
    for (const i of param) {
        if (typeof i !== "number") {
            return false;
        }
    }

    return true;
}

index.ts:

export * from "./file1.ts";
export * from "./file2.ts";

=> Я хочу создать файл определения index.d.ts следующим образом:

declare module "mymodulename" {
    export function delay(timeout: number): Promise<boolean>;
    export function isNumberArray(param: number[] | undefined): param is number[];
}
0 голосов
/ 01 мая 2018

Вам нужно указать --module system и --out, чтобы получить результат, который вы ищете:

Учитывая, что ваш файл находится в файле "mymodule.ts", следующая команда

tsc mymodule.ts --lib 'es6' --declaration -t es6 -module system -out mymodule.js

сгенерирует:

declare module "mymodule" {
    export function delay(timeout: number): Promise<boolean>;
}
...