在TypeScript中,如果你想访问在模块外部定义的类,你需要确保这个类是在全局作用域中定义的,或者通过某种方式(例如,通过导入)将其引入到你的模块中。
这里有几种可能的情况和解决方案:
1. 类在全局作用域中定义
如果你的类是在全局作用域中定义的(例如,在HTML的<script>
标签中,或者在一个没有使用模块系统的JavaScript文件中),并且你希望在一个TypeScript模块中访问它,你可以使用declare
关键字来告诉TypeScript这个类存在。例如:
// global.d.ts
declare class MyClass {constructor(arg: string);myMethod(): void;
}// myModule.ts
import './global.d.ts'; // 这行可能需要根据你的配置进行调整,有时可能不需要显式导入声明文件const instance = new MyClass('hello');
instance.myMethod();
注意,这种方法只适用于在全局作用域中真正存在的类。如果你试图声明一个并不存在的类,那么在运行时你会遇到问题。
2. 类在另一个模块中定义
如果类是在另一个TypeScript或JavaScript模块中定义的,你可以使用import
语句来导入它:
// MyClass.ts
export class MyClass {constructor(arg: string) {// ...}myMethod(): void {// ...}
}// myModule.ts
import { MyClass } from './MyClass';const instance = new MyClass('hello');
instance.myMethod();
这是最常见的情况,也是推荐的做法,因为它利用了TypeScript和ES6模块的模块化特性。
3. 类在npm包中定义
如果类是在一个npm包中定义的,你可以通过npm install
安装这个包,然后使用import
语句来导入它:
npm install my-package --save
// myModule.ts
import { MyClass } from 'my-package';const instance = new MyClass('hello');
instance.myMethod();
在这种情况下,你需要确保你正在使用的npm包是兼容TypeScript的,或者它提供了类型声明文件(.d.ts
文件)。如果没有,你可能需要自己创建类型声明文件,或者使用require
语句和any
类型来导入它(但这会失去TypeScript的类型检查功能)。