- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 @types/googlemaps
类型定义文件。
代码看起来像
declare namespace google.maps {
/***** Map *****/
export class Map extends MVCObject {
constructor(mapDiv: Element|null, opts?: MapOptions);
fitBounds(bounds: LatLngBounds|LatLngBoundsLiteral): void;
...
...
overlayMapTypes: MVCArray<MapType>;
}
export interface MapOptions {
backgroundColor?: string;
disableDoubleClickZoom?: boolean;
draggable?: boolean;
...
当我尝试在我的项目中使用这个类型定义时,就像这样
import * as google from 'googlemaps';
我得到一个编译错误说
Error:(2, 25) TS2306:File 'C:/Users/CodyB/musicappproj/src/node_modules/@types/googlemaps/index.d.ts' is not a module.
为什么它不认为这个类型定义文件是一个模块?我用错了吗?是不是定义文件有误?
最佳答案
Why does it not consider this types definition file to be a module?
编译器不会将此类型定义文件视为 ECMA6 模块,因为该文件缺少顶级导出/导入。相反,该文件将其导出嵌套/隐藏在 中namespace
并且不导出命名空间。因此,命名空间成为全局范围的一部分,而文件不会成为模块。
只有当文件具有顶级导入或导出时,它才是一个模块。在下面的代码中,foo.ts
和 bar.ts
都是模块,但是 baz.ts
不是,因为它缺少一个 top-级别 import
或 export
语句。
// foo.ts
console.log('foo');
export {}
// bar.ts
import * as foo from './foo';
console.log('bar');
// baz.ts
console.log('baz');
// index.ts
import * as foo from './foo';
import * as bar from './bar';
import * as baz from './baz'; // File 'c:/dev/temp/baz.ts' is not a module.ts(2306)
Am I using it wrong?
是的。您正在将文件视为一个模块 - 但事实并非如此。另一种方法是通过它定义的全局命名空间访问它的成员。这里有两种方法:
一种是像这样“点入”命名空间:
const div1 = new HTMLDivElement();
const map1 = new google.maps.Map(div1);
另一种是像这样使用解构:
const { Map } = google.maps;
const div2 = new HTMLDivElement();
const map2 = new Map(div2);
Is the definition file wrong?
没有。它采用了一种有效的方法,尽管这种方法对于浏览器(例如 Firefox)应用程序来说比对于 NodeJS 应用程序更为传统。
https://www.typescriptlang.org/docs/handbook/namespaces.html
https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html
关于typescript - 如何导入顶级元素是非导出命名空间的 Typescript 类型定义文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47826035/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我已更改 my.cnf。并检查sql_mode使用下面的命令 select @@global.sql_mode; 它说, 我也尝试过 set global sql_mode=''; SET sql_m
首先,我有一个结构,它有一个值和一个默认值 struct S { int a = 1; }; 当 gcc 和 clang 都是 non-const/non-constexpr 时,可以默认构造
我是一名优秀的程序员,十分优秀!