如何在index.d.ts中导入其他模块

时间:2019-06-02 03:14:14

标签: javascript typescript react-native

背景

我正在使用打字稿制作天真的应用程序。我正在使用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

0 个答案:

没有答案