笔记-TypeScript整理-更中

简介及安装

JavaScript是一门动态弱类型语言。对变量的类型非常宽容,没有类型约束。
TS是一个拥有类型系统的JavaScript超集,可以编译成纯JavaScript。
ts主要提供了类型系统和对ES6的支持。
tsconfig.json目录中文件的存在表明该目录是ts项目的根。该tsconfig.json文件指定了根文件和编译项目所需的编译器选项。
有node环境,通过npm安装:
安装:

npm i -g typescript

检查ts版本:

tsc -v

强类型语言

强类型语言和弱类型语言
  • 强类型语言:不允许改变变量的数据类型,除非进行强制类型转换。
  • 弱类型语言:变量可以被赋予不同的数据类型。
    动态类型语言和静态类型语言
  • 静态类型语言:在编译阶段确定所有变量的类型。
  • 动态类型语言:在执行阶段确定所有变量的类型。
    静态类型与动态类型对比:
静态类型语言动态类型语言
对类型极度严格对类型非常宽松
立即发现错误Bug可能隐藏数月甚至数年
运行时性能好运行时性能差
自文档话可读性差

动态类型语言的支持者认为:

  • 性能是可以改善的(V8引擎),而语言的灵活性更重要
  • 隐藏的错误可以通过单元测试发现
  • 文档可以通过工具生成
    强类型语言:不允许程序在发生错误后继续执行。
总结:ts是一门强类型静态类型语言。

三个要点

三个要点:
• 类型检查
TS会在编译代码时,进行严格的静态类型检查。
• 语言扩展
异步操作、装饰器、接口类型、抽象类。
• 工具属性
TS可以编译成标准的JavaScript。

类型检测!!

类型引发的问题 首先需要知道,编程开发中我们有一个共识:错误出现的越早越好
能在写代码的时候发现错误,就不要在代码编译时再发现(IDE的优势就是在代码编写过程中帮助我们发现错误)
能在代码编译期间发现错误,就不要在代码运行期间再发现(类型检测就可以很好的帮助我们做到这一点)
能在开发阶段发现错误,就不要在测试期间发现错误,能在测试期间发现错误,就不要在上线后发现错误

类型思维的缺失

前端开发人员通常不关心变量或者参数是什么类型的,如果在必须确定类型时,我们往往需要使用各种判断验证
经常会说JavaScript不适合开发大型项目,因为当项目一旦庞大起来,这种宽松的类型约束会带来非常多的安全隐患,多人员开发它们之间也没有良好的类型契约

标题TypeScript 4.1新特性

• 字符串模板类型
字符串模板中的联合类型会被展开后排列组合:

type T3 = `${'top' | 'bottom'}-${'left' | 'right'}`;  
// 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'

• 新增关键字

• uppercase
• lowercase
• capitalize
• uncapitalize

大写、小写、首字母大写、首字母小写

type Cases<T extends string> = `${uppercase T} ${lowercase T} ${capitalize T} ${uncapitalize T}`;
type T11 = Cases<'bar'>;  // 'BAR bar Bar bar'

• 配合infer
模板字符串可以通过infer关键字,实现类似于正则匹配提取的功能:

type MatchPair<S extends string> = S extends `[${infer A},${infer B}]` ? [A, B] : unknown;
type T20 = MatchPair<'[1,2]'>;  // ['1', '2']
type T21 = MatchPair<'[foo,bar]'>;  // ['foo', 'bar']

通过 , 分割左右两边,再在左右两边分别用一个 infer 泛型接受推断值 [ i n f e r A , {infer A}, inferA,{infer
B}],就可以轻松的重新组合 , 两边的字符串。 配合 … 拓展运算符和 infer递归,甚至可以实现 Join 功能:

type Join<T extends (string | number | boolean | bigint)[], D extends string> =
    T extends [] ? '' :
    T extends [unknown] ? `${T[0]}` :
    T extends [unknown, ...infer U] ? `${T[0]}${D}${Join<U, D>}` :
    string;
type T30 = Join<[1, 2, 3, 4], '.'>;  // '1.2.3.4'
type T31 = Join<['foo', 'bar', 'baz'], '-'>;  // 'foo-bar-baz'
Here is yuque doc card, click on the link to view:https://www.yuque.com/go/doc/11274721
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值