美文网首页React
JS 升级到 TS 的三种策略

JS 升级到 TS 的三种策略

作者: CondorHero | 来源:发表于2021-04-23 18:56 被阅读0次
JS 升级到 TS 的三种策略.png

前言

折腾、折腾、折腾,今天终于在项目中用上了 TS,但是 TS 的学习成本还是挺高的,有点抗拒,结果今天一用。

口说无凭,我给大家举个我们项目中的一个例子。相信每一个项目都会有组件,组件的好处就是复用,也就是说我们用的时候简单的配置下就行了,这时候就有个问题,也是大家最容易吐槽的,没有文档。不过话说回来,就是有文档,又🈶️谁能做到文档的简洁易懂如 Vue。

说回文档,一般文档我喜欢在组件的根目录下新建一个 readme.md 文件来写,当然有的人喜欢通过注释,有没有一种方法让代码即注释呢——有,看例子。

下面代码是 table 表头的一些属性,如果没有文档说明,我去新开发或维护第一眼看到这么多的参数,肯定是蒙的,必须硬着头皮去看逻辑实现。

const ORDER_PLAN_PAGE_ID = {
    columns: [
        { id: "status", order: 1, show: true, fixed: false, isDefault: true, width: 100 },
        { id: "desc", order: 3, show: true, fixed: false, isDefault: true, width: 150 },
        { id: "userName", order: 9, show: true, fixed: "right", isDefault: true, width: 120 },
    ],
};

export default {
    ORDER_PLAN_PAGE_ID,
};

但是当我用上了 TS 之后:

interface Icolumns {
    id: string;
    order: number;
    width: number;
    show: boolean;
    fixed: boolean | string;
    isDefault: boolean;
}
interface ItableProps {
    columns: Array<Icolumns>;
}

const ORDER_PLAN_PAGE_ID = {
    columns: [
        { id: "status", order: 1, show: true, fixed: false, isDefault: true, width: 100 },
        { id: "desc", order: 3, show: true, fixed: false, isDefault: true, width: 150 },
        { id: "userName", order: 9, show: true, fixed: "right", isDefault: true, width: 120 },
    ],
};

export default {
    ORDER_PLAN_PAGE_ID,
};

通过接口来约束配置,非常清晰明了,还少了写文档的麻烦。

总结: 大家一定要早早的培养自己的类型思维,这真是利己利他的大好事。

正文

为了培养我们缺失的类型思维,我们需要使用 TS,可是我们知道切到 TS 并没有那么容易,有两个很大的痛点:

  • 项目太大,重构非常的麻烦
  • TS 有学习成本,应该渐进式升级,而不是断崖式升级

因此 TS 的升级也不是一蹴而就的,依据对 JS 的兼容性可分为三种策略:

  1. 共存策略
  2. 宽松策略
  3. 严格策略

共存策略

共存策略: 即 JS 和 TS 共存,存在的 JS 文件,我们还可以决定对其是否进行类型检查。

配置 tsconfig.json 文件的 allowJs 字段即可开启 JS。

{
  "compilerOptions": {
    "allowJs": true
  }
}

如果你想对 JS 文件进行类型检查,只需要添加字段 checkJs 并设置位 true,因为它默认为 false。

{
  "compilerOptions": {
    "allowJs": true,
    "checkJs": true
  }
}

在 JS 中还有些关于类型检查的注释语法可以使用,常用的可以参考:JS 项目中类型系统的分级

目前我司使用的就是这种策略,平时开发过程中进行慢慢的重构,使用这种策略需要注意一点,那就是 JS 中无论如何不能使用 TS/TSX,所以对于项目中的 JS 文件,能重构最好,不能重构就,有 JSX 语法,就命名为 .jsx 文件,这个可以兼容 TS/TSX 的,如果是单纯的 JS ,重构为 TS 就很简单。

宽松策略

宽松策略: 没有 JS 文件,但类型检查使用最宽松的模式。

我司比较坑,项目文件全部都是 JS 结尾的,如果想升级到 TS ,根本没法通过写脚本文件,把 JS 文件变成 TS 文件,JSX 文件变成 TSX 文件,无奈采用了第一种共存策略。

不过说实话,我本身对这个策略,也不是很感冒,因为采用的是最宽松的策略,可能导致一次升完级,开启严格模式之后再次进行重构,而且此时的类型检查,会有一定的 JS 遗留问题,这种歌策略费时费力,不建议。

这个升级办法也很简单,allowJs、checkJs 和 strict 都为 false 或者不写,然后所有地方的类型声明全部都使用 any。

严格策略

严格策略: 没有 JS 文件且 strict 为 true。

这个没啥好讲的,升级的最终目的就是在项目中全部使用 TS 编程,如果你有足够的耐心,升级项目也可一步到位,直接使用严格策略。

如果不行的话,就只能慢慢升级或者期望 TS 新项目。

相关文章

  • JS 升级到 TS 的三种策略

    前言 折腾、折腾、折腾,今天终于在项目中用上了 TS,但是 TS 的学习成本还是挺高的,有点抗拒,结果今天一用。 ...

  • TS认识

    TS是什么? TS是一门以JS为基础构建的语言 TS是一个JS的超集 TS可以在任何支持JS的平台中执行 TS扩展...

  • 【第7篇】TypeScript泛型的案例代码详解

    1、最简单泛型例子 Ts代码 Js文件 2、泛型类型与接口 Ts代码一 Ts编译js代码一 Ts代码二 Ts编译j...

  • axios封装

    Js TS

  • TypeScript 学习笔记 之 变量声明

    TS 跟最新的 JS 标准一样支持三种变量声明类型:var,let,const。其中 let 是为了取代 var ...

  • TS入门2019-08-13

    ts和js出了类型声明其他的都是一样的。(ts就是比js多了一个类型声明) ts 与 js 相比,其实就是把类型给...

  • 入门向

    1、浏览器可以直接运行JS; 2、浏览器不能直接运行TS; 3、要把TS变成JS放在浏览器运行; 把TS变成JS的...

  • typescript

    与js的关系以及区别:1、ts是js的超集,更适用于大型项目开发。2、ts是强类型、js是弱类型。3、ts是编译型...

  • ts简介和安装使用

    简介 ts是微软开发的一款开源的编程语言 ts是js的超集,遵循最新的es5/es6规范,ts扩展类js语法 ts...

  • typescript 入门

    ts 是js 的超集 安装 运行 node.js 环境执行ts 类型 基础类型:Boolean、Number、St...

网友评论

    本文标题:JS 升级到 TS 的三种策略

    本文链接:https://www.haomeiwen.com/subject/gaqglltx.html