你用的是TypeScript还是AnyScript

这篇博客介绍了TypeScript,JavaScript的超集,强调了在大型项目中使用TypeScript的优势,如类型约束和维护性。文章讨论了TypeScript与JavaScript的关系,解释了为什么使用TypeScript,并澄清了一些常见误解。接着,文章提供了TypeScript的入门指导,包括环境搭建、项目初始化和HelloWorld实现。最后,深入探讨了TypeScript的类型系统,包括类型声明、数组、元组、对象、函数、枚举、interface和泛型等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是TypeScirpt

1.1 TypeScript简介

TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。

1.2 TypeScript和JavaScript的关系

TypeScript是JavaScript的一个超集,他们之间并不是所属关系,TypeScript扩展了JavaScript弱类型语言的限制,增加了更多的模块解析方式和语法糖。TypeScript并不是一个能独立运行的语言,大多数时候他都被转译成JavaScript运行,所以可以简单的认为TypeScript相当于功能更丰富的编译型的JavaScript。

1.3 为什么要使用TypeScript

传统的JavaScript本身已完全可以满足完整的应用开发需求,但在大型项目协作开发或插件开发的场景中JavaScript弱类型语言的不足便暴漏出来。由于JavaScript并非编译型语言,在代码编写过程中无法轻松的实现良好的类型约束和类型推断。若开发者提供了一个JavaScript依赖包给其他开发者使用,使用依赖的开发者并不能显示观察依赖包内部的类型组成,很容易出现下列场景,代码如下:

//若依赖包提供了属性foo并对其期待类型为string
foo = 123 //此时应用foo变量的开发者为其设置数字类型
...
foo = false //后续又存在开发者为其设置boolean类型
//这种应用方式会导致在代码阅读上无法确定该属性的明确类型
//也会导致运行上的一定风险

综上所述,JavaScript语言在代码的可维护性上存在一些弱项,所以此时强类型的TypeScript语法正好适用于此类开发场景。TypeScript强类型的约束性以及其面向接口编程的约束性可以让TypeScript语法开发的应用有极强的维护性,代价是更大量的代码篇幅。TypeScript非常适合插件提供者、依赖库提供者、基于JavaScript的服务端项目以及大型项目的工程化开发使用,所以并不意味着其适用于一切JavaScript项目做改造。

1.4 TypeScript的认知误区

1.之所以TypeScript能流行,是因为其的性能优于JavaScript?

这是一个很大的误区,目前TypeScript的主流使用场景都是在Web领域,从上面的介绍得知

任何使用TypeScript脚本开发的应用或游戏,都不是通过直接运行该语言而实现应用运转的,可以认为TypeScript是一种语法,并不是运行语言。直接运行TypeScript的内核暂时尚未普及,所以绝大多数的TypeScript项目都是需要一次编译,最终执行的还是JavaScript,所以并不能代表性能优势。

TypeScript语言之所以流行,是因为其类型化的JavaScript,在上下文阅读时可以提供更好的类型追溯,通过编辑器插件可已实现更有好的提示。其模块和命名空间等能力更加符合工程化的前端思想。

2.用了TypeScript的项目就比使用JavaScript更好

这是很多认知层面的误差导致的错误认识,有一部分公司为了追赶大厂的项目架构,没有目的的在Vue或React项目中植入TypeScript模块,这种植入并没有帮助项目更好的开发,反而会因为开发者对语言的认识偏差使其变成毫无用处的鸡肋。在技术架构并不复杂的应用开发中,TypeScript的使用会增加大量的代码量,所以在简单项目开发中,单纯的使用ES6-ES2022语法足够满足工程化需求。乱用类型也会让TypeScript失去其默认的意义,很多项目中由于开发者并不熟悉TypeScript,会出现除基本类型外全部:any的实现,导致TypeScript变成AnyScript,这也是一个极其不好的现象,因为TypeScript的类型系统主要用于迭代和维护项目,最终运行的JavaScript源代码中并不会出现类型。

2.TypeScript入门

TypeScript的中文文档地址为:TypeScript中文网 · TypeScript——JavaScript的超集后续部分可能需要进行文档查阅。

2.1 环境搭建

打开电脑的命令行工具执行TypeScript引擎安装命令,代码如下:

npm install typescript -g

安装成功后,在命令行工具中输入引擎版本指令查看版本号码,代码如下:

tsc -v

出现版本号代表安装成功。

2.2 创建项目

TypeScript引擎安装成功后,就可以在代码编辑器中通过引擎命令实现TypeScript的项目初始化。初始化项目的方式与初始化Node项目类似。在代码编辑器中创建任意文件夹,在命令行工具中打开文件夹,输入初始化TypeScript项目的命令,代码如下:

tsc --init

命令输入后,文件夹中会自动生成名为tsconfig.json的文件,该文件内容如下:

{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */
​
    /* Projects */
    // "incremental": true,                              /* Enable incremental compilation */
    // "composite": true,                                /* Enable constraints that allow a TypeScript project to be used with project references. */
    // "tsBuildInfoFile": "./",                          /* Specify the folder for .tsbuildinfo incremental compilation files. */
    // "disableSourceOfProjectReferenceRedirect": true,  /* Disable preferring source files instead of declaration files when referencing composite projects */
    // "disableSolutionSearching": true,                 /* Opt a project out of multi-project reference checking when editing. */
    // "disableReferencedProjectLoad": true,             /* Reduce the number of projects loaded automatically by TypeScript. */
​
    /* Language and Environment */
    "target": "es2016",                                  /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
    // "lib": [],                                        /* Specify a set of bundled library declaration files that describe the target runtime environment. */
    // "jsx": "preserve",                                /* Specify what JSX code is generated. */
    // "experimentalDecorators": true,                   /* Enable experimental support for TC39 stage 2 draft decorators. */
    // "emitDecoratorMetadata": true,                    /* Emit design-type metadata for decorated declarations in source files. */
    // "jsxFactory": "",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
    // "jsxFragmentFactory": "",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
    // "jsxImportSource": "",                            /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
    // "reactNamespace": "",                             /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
    // "noLib": true,                                    /* Disable including any library files, including the default lib.d.ts. */
    // "useDefineForClassFields": true,                  /* Emit ECMAScript-standard-compliant class fields. */
​
    /* Modules */
    "module": "commonjs",                                /* Specify what module code is generated. */
    // "rootDir": "./",                                  /* Specify the root folder within your source files. */
    // "moduleResolution": "node",                       /* Specify how TypeScript looks up a file from a given module specifier. */
    // "baseUrl": "./",                                  /* Specify the base directory to resolve non-relative module names. */
    // "paths": {},                                      /* Specify a set of entries that re-map imports to additional lookup locations. */
    // "rootDirs": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */
    // "typeRoots": [],                                  /* Specify multiple folders that act like `./node_modules/@types`. */
    // "types": [],                                      /* Specify typ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值