如何定义导入变量类型

mat*_*ich 9 typescript

我已经noImplicitAny设置true为我的TypeScript编译器.当我使用像下面这样的导入时,它会抛出一个错误,因为我没有明确定义foo变量的类型:

import * as foo from "bar";

我能够定义一个foo使用CommonJS require语法的类型:

const foo: FooType = require("bar");

有没有办法定义foo使用import * as ...语法的类型?

Paa*_*rth 8

我相信你的意思是......

import * as foo: IFoo from "foo"
Run Code Online (Sandbox Code Playgroud)

要么

import foo : IFoo from "foo"
Run Code Online (Sandbox Code Playgroud)

那是准确的吗?

这已被讨论,但最终决定反对.

相反,建议您declare module 'bar'并给它适当的打字.一旦完成,您将能够import * as foo from "bar"正确打字.

有关推荐方法的更多详细信息,请参阅此问题

一个潜在的例子:

untyped.d.ts

declare module "bar" {
    const foo:IFoo;
    export = foo;
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
    "compilerOptions": {
        ...
    },
    "include": [
        "untyped.d.ts",
        "src/**/*.ts",
        "src/**/*.tsx"
    ]
}
Run Code Online (Sandbox Code Playgroud)

"untyped.d.ts"这个名字在这里没有任何实际意义,我个人用它作为我个人项目中无类型模块的收藏.随意给它起任何合适的名字.

ps你也可以选择使用files数组属性而不是include这个,但我倾向于不打扰因为files不尊重那些exclude让一些人感到困惑的属性.有关详细信息,请参阅文档.