【问题标题】:Ambient module with some explicit interfaces带有一些显式接口的环境模块
【发布时间】:2018-03-22 11:31:19
【问题描述】:

当我定义时

declare module "my-module";

我是说“你可以从这个模块导入任何东西”例如:

import {funcFuncFunc} from 'my-module';

funcFuncFunc(10); // No error here

但是!我不能使用从这个模块导入的任何东西作为类型。

import {BlahBlahBlah} from "my-module";

let a: BlahBlahBlah; // Error like "Cannot use namespace 'BlahBlahBlah' as a type.

如果我这样定义这个接口:

declare module "my-module" {
  type BlahBlahBlah = any;
}

那么最后一个例子可以正常工作,但第一个例子会中断。

问题:有没有办法做出一个定义,让我可以两全其美?我只想为我想用作类型的东西定义显式接口,而其他一切都是隐式的。

所以,这将起作用:

declare module "my-module" {
  type BlahBlahBlah = any;
  // + Some any Magic
}

import {BlahBlahBlah, funcFuncFunc} from 'my-module';

let a: BlahBlahBlah;
funcFuncFunc(10);

【问题讨论】:

  • 尝试在类型或变量前添加“export”。
  • 据我所知,您不能使用隐式解析为 any 的未定义名称。

标签: typescript typescript-typings


【解决方案1】:

declare module "my-module"; 是当您找不到现有声明文件 (.d.ts)、没有时间编写或将模块转换为 typescript 时的快捷方式。

如果你想写一个合适的声明文件,官方文档在这里:https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html

您可以看到一个可以复制的实时示例https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/random-js/index.d.ts

请注意,如果模块很简单,则编写声明文件可能比将模块转换为打字稿要长。 (YMMV)

【讨论】:

  • 不过,这并不能回答我的问题。
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
相关资源
最近更新 更多