在TypeScript中扩展第三方库的类型声明是一个常见需求。下面我将介绍如何扩展store.js包的StoreJsAPI
接口的set
方法。
storejs.d.ts
)// storejs.d.ts
import 'store';
declare module 'store' {
interface StoreJsAPI {
// 扩展set方法
set<T>(key: string, value: T, expires?: number): T;
// 或者完全重写set方法
// set: <T>(key: string, value: T, expires?: number) => T;
}
}
如果你不想修改原始类型声明,可以创建一个包装函数:
import store from 'store';
interface ExtendedStore extends StoreJsAPI {
setWithExpiry<T>(key: string, value: T, expires: number): T;
}
const extendedStore: ExtendedStore = {
...store,
setWithExpiry<T>(key: string, value: T, expires: number): T {
// 你的实现逻辑
return store.set(key, value);
}
};
export default extendedStore;
如果你只需要临时扩展类型:
import store from 'store';
(store as any).setWithExpiry = function<T>(key: string, value: T, expires: number): T {
// 实现逻辑
return store.set(key, value);
};
class ExtendedStore {
constructor(private store: StoreJsAPI) {}
set<T>(key: string, value: T, expires?: number): T {
// 你的自定义逻辑
return this.store.set(key, value);
}
// 其他方法...
}
const myStore = new ExtendedStore(store);
选择哪种方法取决于你的具体需求和项目规模。对于简单的扩展,声明合并通常是最简洁的解决方案。