首页 > 解决方案 > 如何在 index.d.ts 中导入其他模块

问题描述

背景

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

注意 locale 参数。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.... }同一个地方。

问题

当我将 react-native-voice 与自定义 index.d.ts 文件一起使用时,出现运行时错误。

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

标签: javascripttypescriptreact-native

解决方案


推荐阅读