Javascript 如何在index.d.ts中导入其他模块 背景
我正在用typescript制作react naive应用程序。我正在使用javascript库。它没有类型声明文件。所以我在Javascript 如何在index.d.ts中导入其他模块 背景,javascript,typescript,react-native,Javascript,Typescript,React Native,我正在用typescript制作react naive应用程序。我正在使用javascript库。它没有类型声明文件。所以我在myproject/src/@types/react native voice/index.d.ts中创建了它,如下所示 declare module "react-native-voice" { type Option = { EXTRA_LANGUAGE_MODEL: string, ... } type StartEvent = {
myproject/src/@types/react native voice/index.d.ts
中创建了它,如下所示
declare module "react-native-voice" {
type Option = {
EXTRA_LANGUAGE_MODEL: string,
...
}
type StartEvent = {
error: boolean
}
....
function start(locale: Locale, options?: Option): Promise<{}>
function stop(): Promise<{}>
function onSpeechPartialResults(e: PartialResults): void
....
}
enum Locale {
en_US = 'en-US',
ko_KR = 'ko-KR',
ja_JP = 'ja-JP',
zh_CN = 'zh-CN',
zh_HK = 'zh_HK',
zh = 'zh'
}
我把它放在声明模块“react native voice”{enum Locale….}
的同一个地方
问题
当我在自定义index.d.ts文件中使用react native voice时,出现运行时错误
TypeError: Cannot read property 'ko_KR' of undefined
是的,react native voice的javascript源代码中没有区域设置变量。我理解这个错误
因此,我将enum Locale
移动到我的constants.ts
文件中,并尝试从index.d.ts
导入它
// index.d.ts
import {Locale} from '../../constants';
declare module "react-native-voice" { ... }
但是,VSCode突然显示错误
Invalid module name in augmentation. Module 'react-native-voice' resolves to an untyped module at 'my-project-path/node_modules/react-native-voice/index.js', which cannot be augmented.ts(2665)
这是什么意思?我应该怎么做才能从
index.d.ts
文件中的constants.ts
导入enum Locale
?enum
生成代码,这样它们就不能是环境代码了。您可以使用字符串文字来完成相同的任务<代码>键入Local='en-US'|'ko-KR'|……@Tyler Sebastian谢谢。但是没有办法在index.d.ts
文件中导入另一个模块吗index.d.ts
文件应该是独立的?@byeonginyon您可以利用声明合并而不是导入其他模块声明合并建议很好,但在这种情况下,您最好完全不使用枚举,而是使用字符串文本类型的并集来键入参数。