我正在使用打字稿制作天真的应用程序。我正在使用react-native-voice JavaScript库。它没有类型声明文件。因此,我在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
....
}
注意语言环境参数。 react-native-voice库的start函数接受locale属性。那只是一个字符串。但是我想像下面这样枚举。
enum Locale {
en_US = 'en-US',
ko_KR = 'ko-KR',
ja_JP = 'ja-JP',
zh_CN = 'zh-CN',
zh_HK = 'zh_HK',
zh = 'zh'
}
然后将其放入declare module "react-native-voice" { enum Locale.... }
,同一个地方。
当我在自定义index.d.ts文件中使用react-native-voice时,出现运行时错误。
TypeError: Cannot read property 'ko_KR' of undefined
是的,react-native-voice的javascript源代码中没有Locale变量。我了解此错误。
因此,我将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)
这是什么意思?以及如何从enum Locale
文件中的constants.ts
导入index.d.ts
?