为什么我不能在我的TypeScript React本机项目中使用时刻作为导入?

时间:2016-10-07 16:12:17

标签: typescript react-native momentjs

我想使用TypeScript在我的ReactNative组件中使用MomentJS。我的项目配置为从 node_modules 目录中提取library's d.ts file

这是我导入库并使用它的方式:

import * as moment from "moment";
const time = moment();

我的打字稿编译但是当我运行应用程序ReactNative错误时:

ReactNative error

这是我的 tsconfig.json 文件:

{
  "compilerOptions": {
    "target": "es6",
    "moduleResolution": "node",
    "jsx": "react",
    "outDir": "build/",
    "sourceMap": true,
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
  }
}

如果我更改了我的tsconfig' target'到es5我遇到了许多其他模块的问题。

我认为它与this question有关,但我按照该问题的答案所建议的那样做。

1 个答案:

答案 0 :(得分:1)

引自@DavidD's comment in the linked answer

  

如果你在上面的语法之上使用babel,请小心,babel将阻止函数moment()按预期工作,因为它与规范相关联。您可以将"allowSyntheticDefaultImports": true添加到tsconfig.json,以允许import moment from "moment";不再抛出错误。

潜在的问题是moment将一个函数导出为默认函数,但是当使用Babel时(因为你在React Native中),它将被Babel包装在一个对象中。

我不确定TypeScript是否知道此包装或者是否需要更新momentjs的定义。