打字稿tsc - declaration

时间:2018-04-30 14:45:32

标签: typescript tslint

当我使用tsc --declaration或tsconfig.json声明生成我的定义文件“.d.ts”时,生成文件不包括

声明模块“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>;
}

如何在生成的.d.ts顶部获取'declare module'mymodule“{......}”?或者如何在没有此声明的情况下使tslint工作?

2 个答案:

答案 0 :(得分:1)

更多信息:

  • 我需要使用模块&#34; commonJS&#34;对于我的模块定义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";

=&GT;我想生成一个定义文件index.d.ts,如下所示:

declare module "mymodulename" {
    export function delay(timeout: number): Promise<boolean>;
    export function isNumberArray(param: number[] | undefined): param is number[];
}

答案 1 :(得分:0)

您需要指定--module system--out以获取您要查找的输出:

鉴于您的文件位于文件&#34; mymodule.ts&#34;,以下命令

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

将生成:

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