我正在尝试使用rxjsObservable
中的类型作为我自己库中方法的返回值,但我不想将rxjs依赖项添加到我的项目中。它是可选的,只有在我的库的用户实际使用这些特定方法时才需要,在这种情况下,他们必须自己将rxjs安装到他们的项目中。observe
我找不到正确的打字稿语法。
以下代码总结了我现在如何使用它,如果使用我的库的项目中未安装rxjs ,则会出现 TypeScript 错误:“找不到模块 'rxjs' 或其相应的类型声明.ts(2307) ”
我已将Observable导入隔离到一个文件中,因此我可以从多个实现observe
方法的类(文件)中引用它。另外,请注意,我使用的是我自己的类型定义文件,而不是使用tsc生成它们,以防止在我的库中公开私有和/或实验 API。
类型/可选-observable.d.ts:
export { Observable } from 'rxjs'; // Error if rxjs is not in project, needs fixing
类型/数据-reference.d.ts:
import { Observable } from './optional-observable';
export class DataReference {
// many other properties and methods
observe(): Observable<any>
observe<T>(): Observable<T>
}
在可选 observables 的实现中,我使用以下代码:
src/optional-observable.ts:
export function getObservable() {
try {
const { Observable } = require('rxjs');
if (!Observable) { throw new Error('not loaded'); }
return Observable;
}
catch(err) {
throw new Error(`RxJS Observable could not be loaded. Add it to your project with: npm i rxjs`);
}
}
src/data-reference.ts:
import { getObservable } from './optional-observable';
export class DataReference {
observe() {
const Observable = getObservable(); // throws if rxjs not installed, which is ok
return new Observable(observer => {
// ....
});
}
}
总结一下:
- 我的库中有需要rxjs Observables才能工作的方法,但它们是可选的
- 如果我的库的用户使用这些方法,他们必须将rxjs依赖项添加到他们的项目中
- 如果安装了rxjs,则自动完成功能可用于我
observe
在 IDE 中的方法 - 如果未安装rxjs,则必须没有编译时错误。