在我的NextJS web应用程序中,我已经为我安装的没有可用类型的包设置了一组自定义类型。我需要用第三方脚本中的模块扩展我的window。
因此,我在我的Window文件中扩展并导出了global.d.ts接口。一旦我这样做了,我已经在全球范围内声明了any类型的包之一开始给我一个臭名昭著的Could not find a declaration file for module but it exists (TS7016)错误。当我删除新的全局window类型的新导出时,TS7016退出了。
如何将第三方模块的两种自定义类型与导出的自定义全局类型结合起来?
// global.d.ts
declare module '@package-maintainer/*';
declare module '@package-maintainer-2/*';
declare module 'some-package';
declare module 'some-package-2';
export declare global {
interface Window {
thirdPartyModule: {
aMethod: () => void
};
}
}发布于 2022-09-30 22:55:27
经过几次测试后,我认为问题在于导出了一个模块,该模块将global.d.ts文件本身转换为一个模块,这与declare module不兼容。我不太清楚这背后的原因。我得再深入研究一下。
这里的解决方案是将自定义类型定义分为两个文件,一个用于全局定义,另一个用于模块定义:
// global.d.ts
export declare global {
interface Window {
thirdPartyModule: {
aMethod: () => void
};
}
}// modules.d.ts
declare module '@package-maintainer/*';
declare module '@package-maintainer-2/*';
declare module 'some-package';
declare module 'some-package-2';使用这些分隔的,但都包含在我的tsconfig中,我能够扩展我的window对象,并为我的第三方包保留自定义强制到any。
https://stackoverflow.com/questions/73914648
复制相似问题