Javascript 我可以像flow一样使用可选的typescript吗?

Javascript 我可以像flow一样使用可选的typescript吗?,javascript,reactjs,typescript,babeljs,Javascript,Reactjs,Typescript,Babeljs,我正在启动一个新的react redux项目,并考虑再次使用typescript。我尝试的上一个版本是1.6,但typescript从那时起就有了很大的发展 我做了一个很小的PoC,我喜欢javascript中静态类型的想法,但我不得不一直处理丢失或损坏的类型定义,这真的让我很烦。最新的示例是material ui中的一个断开的类型定义。我觉得我必须与编译器抗争,而不是它帮助我 所以我的想法是将es6与babel一起使用,并以一种可选的方式(如flow)添加typescript。我了解到type

我正在启动一个新的react redux项目,并考虑再次使用typescript。我尝试的上一个版本是1.6,但typescript从那时起就有了很大的发展

我做了一个很小的PoC,我喜欢javascript中静态类型的想法,但我不得不一直处理丢失或损坏的类型定义,这真的让我很烦。最新的示例是material ui中的一个断开的类型定义。我觉得我必须与编译器抗争,而不是它帮助我

所以我的想法是将es6与babel一起使用,并以一种可选的方式(如flow)添加typescript。我了解到typescript 2.3能够通过顶部的@ts check注释实现这一点

那么这两者是如何协同工作的呢?我需要一些babel插件来摆脱.js文件中的类型定义,还是必须使用.ts.tsx扩展名

或者这完全是胡说八道,我必须去“完整的打字脚本”模式,并且必须适应它

老实说,我有点不知所措

更新

Babel将在下一版本7.0中支持typescript。 一个测试版已经出来测试它了。 据我所知,你现在可以使用巴别塔作为传输和添加巴别塔预设打字脚本。 然后,您可以在监视模式下使用typescript,或者仅使用VS代码错误报告。
我想在不久的将来,这将是我最喜欢的堆栈。

如果您安装了material-ui@next它有自己的类型,您不需要安装@types/material ui。如果你这样做了,他们会犯很多错误。然而@next目前beta.9当然正在积极开发中,出现了许多打字问题。我和其他人在每个版本上都会很快地提出问题,以确保项目的输入是健壮的

目前如果你使用beta.8,我没有任何打字问题。此外,如果您使用的是typescript,则不需要babel。Typescript编译器将根据您想要的任何规范构建您的项目

一旦你弄清楚它是如何构建的,Typescript就很容易了。跨过这一关后,剩下的就简单了

对我来说,我使用.ts/.tsx扩展名和本地安装的Typescript。这是我的Tsconfig示例

{
    "extends": "./config/base.json",
    "compilerOptions": {
        "experimentalDecorators": true,
        "lib": [
            "es6",
            "dom",
            "es2015",
            "es2017"
        ],
        "typeRoots": [
            "node_modules/@types",
            "node_modules"
        ],
        "types": [
            "node", "jest", "lodash", "react",
            "react-dom", "react-redux", "redux-logger", "material-ui",
            "react-router-dom", "react-router-redux", "react-autosuggest",
            "redux", "binary-type-tree", "redux-form",
            "tedb", "react-tap-event-plugin", "redux-thunk",
            "react-hot-loader", "history", "material-ui-icons"
        ],
        "outDir": "dist"
    },
    "include": [
        "src",
        "node_modules/**/*.d.ts",
        "node_modules/@types/**/*.d.ts"
    ],
    "exclude": [
        "node_modules",
        "dist",
        "spec",
        "webpack"
    ]
}
基地呢

{
  "compileOnSave": false,
  "compilerOptions": {
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2015",
    "module": "es2015",
    "moduleResolution": "node",
    "strict": true,
    "pretty": true,
    "jsx": "react",
    "sourceMap": true,
    "importHelpers": true,
    "removeComments": false,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "noEmitOnError": true,
    "strictNullChecks": true
  }
}
我的一些类型需要列在
的“类型”
中,我不确定这种情况是否仍然存在,但要求像这样列出所有类型。我希望这能有所帮助。package.json
“main”
将指向
“dist/index.js”
“构建”:“rm-rf./dist/*&&tsc”
“类型”:“dist/index.d.ts”


这只是我的设置。但我希望它有助于解决一些问题。

请参阅。在项目中创建一个tsconfig文件,并将@ts check注释添加到要键入check的.js文件中。VSCode将能够给出关于错误类型的警告,但它们不会破坏您的构建。这不是胡说八道。我个人更喜欢“完整的打字脚本”体验,但这绝对是一个品味问题,这里没有一个真正的答案。我的观点是相当主观的,但我认为如果你在构建过程中偏离常规,从长远来看,你会遇到更多的维护难题。我使用
create-react-app-typescript
,不必担心自己升级TS build。对于类型不一致的问题,我通常会亲自破解/修补
.d.ts
文件,或者在我无法解决的情况下转换到
任何
。我强烈怀疑,维持一个混合版本将是一个实时接收器…谢谢你的这些信息。我现在已经使用CreateReact应用程序typescript启动程序完成了完整的typescript部分,并且只添加了很棒的typescript加载程序来实现热重新加载。到目前为止,一切都很顺利。如果有什么事情真的开始困扰我,我总是有机会用ES6弹出,并用babel:)使用TS的输出。