Javascript 如何在TypeScript中声明以对象作为默认导出的模块
在TypeScript项目中,我希望使用不提供类型定义的第三方库。所以我需要提出我自己的模块声明。模块基本上导出的内容如下所示:Javascript 如何在TypeScript中声明以对象作为默认导出的模块,javascript,typescript,type-declaration,Javascript,Typescript,Type Declaration,在TypeScript项目中,我希望使用不提供类型定义的第三方库。所以我需要提出我自己的模块声明。模块基本上导出的内容如下所示: const foo = { bar () { return 23; } }; module.exports = foo; 所以,现在的问题是如何提出模块声明。首先,很明显,模块使用默认导出,而不是命名导出。此默认导出是一个对象,其中包含方法。所以我试了一下: declare module 'foo' { export default {
const foo = {
bar () {
return 23;
}
};
module.exports = foo;
所以,现在的问题是如何提出模块声明。首先,很明显,模块使用默认导出,而不是命名导出。此默认导出是一个对象,其中包含方法。所以我试了一下:
declare module 'foo' {
export default {
bar(): number;
};
}
但是,TypeScript编译器抱怨:
export语句的表达式必须是环境上下文中的标识符或限定名
这是什么意思?使用bar,我使用了一个标识符,不是吗?环境上下文中的限定名称是什么意思
使用bar,我使用了一个标识符,不是吗
错误是关于export子句的对象。虽然您使用了bar作为标识符,特别是作为方法名,但您并没有导出该标识符,而是导出包含该标识符的对象文字
在
标识符栏指的是导出值的方法,而不是导出值本身
要更正此问题,请编写
declare module 'foo' {
const foo: {bar(): number};
export default foo;
}
限定名称是通过限定其名称及其封闭范围(如A.b中所示)来引用的名称
谢谢你的回答,但不幸的是,我没有真正理解这句话:[…]指的是一种输出值的方法,而不是输出值本身。你能解释一下吗?我试着详细解释一下。基本上,bar是方法名,但是您导出的是默认的{bar}而不是默认的bar。可能您混淆了导出{name}包含名称的导出列表和导出默认名称,这相当于导出{name as default}
declare module 'foo' {
const foo: {bar(): number};
export default foo;
}
declare module 'foo' {
namespace ns {
const foo: {bar(): number};
}
export default ns.foo;
}