大型项目都用TS,用TS就很强吗?我要变强是不是也要用TS,这篇文章给你解惑

论未来是JS还是TS,可能很多人都不清晰,欢迎讨论:clap:

很多地方把JS和TS放在一起,相提并论,容易造成误解,以为已是旗鼓相当的两种编程语言.其实根始终都是JS,虽然JavaScript这名称听起来实在有点山寨味,这可能是很多项目想用Typescript称呼代替它的原因

剥离掉JS部分,TS不是编程语言,不是什么高级的东西,只是在JS基础上添加的类型定义文档型语言.在没有TS之前,对一些嵌套继承结构,复杂重载等,光看代码比较晦涩,人们可能就靠备注,汇总文档,做笔记,这样对照着来理解和写JS.屏幕不够用的需要来回切屏,英文不好的朋友容易敲错字母

写TS的过程,就是在给你代码中去写文档,添加类型定义,不过格式要求更规范,不能像之前的文档那么开放自由

有了TS的内嵌文档和标准的格式,编辑器就能够用上,帮助你进行更好的推断,对你正在编写的对象调出文档说明,补充候选提示,就像这样:

这当然很棒,没人不喜欢这样健全的提示,这便是TS的核心作用:

现在你可以理解,为什么优质大型项目,都使用TS了吧?

但如此强大的内置代码型文档,其完成的复杂性通常也是比你自己写备注文档要高的,尤其在你还不熟悉其规范的情况下.自己写文档可以只挑选重点,配合截图,翻看代码.但写TS,因为代码的结构性相关性,经常需要传导的那一溜都写完,才能获得良好的提示

这也就是为什么很多人赶起项目来,直接@ts-nocheck :any之类的无脑用,直接在ts中写js.其原因是因为此时的重点是需要快速高效实现业务逻辑,而不是同时去编写文档

实际上使用TS是一个自然的过程,当你的项目逐渐趋于稳定,时间不再那么紧迫,又有足够的人手或精力来补充维护文档,这时来专心写TS就非常合适

可见TS从来就不影响核心逻辑,不增加代码运行效率,只对文档和类型定义做补充,所以使用TS不一定代表项目就强,强的人可能从来不写文档(开玩笑,肯定多少还是会写,人脑没有计算机这样的存储能力)

如果你是新项目刚起步,敞开用JS+自制文档吧,最高效,在一开始就写TS文档给项目加固实则会限制你项目的发展,变化艰难.等到需要的时候自然会用上TS,并且可能整天整天的都在写TS,一下就干熟练了,不用担心掌握不了

如果是公司要求上TS,你看着来,写写文档也没什么不好,起码你看完之后懂得了心法,能够收放自如

13 Likes

脑子不够用了

2 Likes

佬 我想知道 env.d.ts 已经写了配置,这个类型文件也确实存在,但是使用 的时候还是没有类型。

env.d.ts

/// <reference types="vxe-table/types/index.d.ts" />

tsconfig.node.json

{
  "extends": "@tsconfig/node18/tsconfig.json",
  "include": [
    "vite.config.*",
    "vitest.config.*",
    "cypress.config.*",
    "nightwatch.conf.*",
    "playwright.config.*"
  ],
  "compilerOptions": {
    "composite": true,
    "noEmit": true,
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "types": ["node"]
  }
}

main.vue

<vxe-table >

提示:VxeTable: unknown

1 Like

看看tsconfig.json有没有包含,@types/node有没安装

佬 这个是有

compilerOptions
 "types": ["node"]

vxe-table/type/index.d.ts

import * as VxeUITable from './all'

export * from './all'
export default VxeUITable

all.d.ts

import { App } from 'vue'
import { VxeUIExport, VxeGlobalConfig } from 'vxe-pc-ui'

declare global {
  interface Window {
    /**
     * @deprecated
     */
    VXETable: VxeUIExport;
    VxeUITable: VxeUIExport;
  }
}
...
1 Like

佬哥,看看是不是main.ts里面没引入,可以看下官网文档确认下

import VxeUITable from 'vxe-table'
import 'vxe-table/lib/style.css'

createApp(App).use(VxeUI).use(VxeUITable).mount('#app')
1 Like

引入了,我这是类型没法提示,但这个组件是可以使用的。

1 Like

感觉好复杂

1 Like

学不动了,哎

1 Like

其实我觉得TS增加了工作量,而且不一定用了TS就能保证规范,有的项目整个都是any一把索。还不如用JStieba_010

1 Like

好家伙 :joy:

1 Like

typescript又叫anyscript

1 Like

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。