TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准(ES6 教程)。

TypeScript 由微软开发的自由和开源的编程语言。

TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

1 TypeScript VS JavaScript

TypeScript JavaScript
JavaScript 的超集,用于解决大型项目的代码复杂性 一种脚本语言,用于创建动态网页
强类型,支持静态和动态类型 动态弱类型语言
可以在编译期间发现并纠正错误 只能在运行时发现错误
不允许改变变量的数据类型 变量可以被赋值成不同类型

2 TypeScript基础

2.1 TS基础-基础类型

  1. boolean、number、string
  2. undefined、null
  3. any、unknown、void
  4. never
  5. 数组类型 []
  6. 元组类型 tuple
// 举个例子
function test(x:string | number):boolean {
if (typeof x === 'string') {
return true;
} else if (typeof x === 'number') {
return false;
}
return throwError('参数格式不对');
} function throwError(message:string):never {
throw new Error(message);
}

2.2 TS基础-函数类型

定义:TS定义函数类型时要定义输入参数类型和输出类型

输入参数:参数支持可选参数和默认参数

输出参数:输出可以自动推断,没有返回值时,默认为 void 类型

函数重载:名称相同但参数不同,可以通过重载支持多种类型

function add(x:number[]):number
function add(x:string[]):string
function add(x:any[]):any {
if (typeof x[0] === 'string') {
return x.join()
}
if (typeof x[0] === 'number') {
return x.reduce((acc,cur) => acc + cur)
}
}

2.3 TS基础-interface

定义:接口是为了定义对象类型

特点:

  • 可选属性:?
  • 只读属性:readonly
  • 可以描述函数类型
  • 可以描述自定义属性

总结:接口非常灵活duck typing

interface RandomKey {
[propName:string]:string
} const obj:RandomKey = {
a:'hello',
b:'world',
c:'typescript',
}

2.4 TS基础-类

定义:写法和JS差不多,增加了一些定义

特点:

  • 增加了 public、private、protected 修饰符
  • 抽象类:
    • 只能被继承,不能被实例化
    • 作为基类,抽象方法必须被子类实现
  • interface:约束类,使用implements关键字

3 TypeScript 进阶

3.1 TS进阶-高级类型

  1. 联合类型 |
  2. 交叉类型 &
  3. 类型断言
  4. 类型别名(type VS interface)
    • 定义:给类型起个别名
    • 相同点:
      1. 都可以定义对象或函数
      2. 都允许继承
    • 差异性
      1. interface是TS用来定义对象,type是用来定义别名方便使用;
      2. type可以定义基本类型,interface:不行;
      3. interface可以合并重复声明,type不行;

3.2 TS进阶-泛型-什么时候需要泛型?

官方定义:

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。

组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件,

一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。

有点晦涩,还是举个栗子。

3.3 TS进阶-泛型-什么时候需要泛型?

3.4 TS进阶-泛型-基本使用

基本定义:

  1. 泛型的语法是◇里面写类型参数,一般用T表示;
  2. 使用时有两种方法指定类型:
    1. 定义要使用的类型
    2. 通过TS类型推断,自动推导类型
  3. 泛型的作用是临时占位,之后通过传来的类型进行推导;
function print<T>(arg:T):T {
console.lLog(arg)
return arg
}
print<string>('hello') // 定义T为string
print('hello') // TS类型推断,自动推导类型为string

3.5 TS进阶-泛型工具类型-基础操作符

3.6 TS进阶-泛型工具类型-常用工具类型

  • Partials:将类型属性变为可选
  • Required:将类型属性变为必选
  • Readonly.:将类型属性变为只读
  • Pick、Record...
type Partials<T> ={
[P in keyof T]?:T[P];
}; type Required<T> = {
[P in keyof T]-?:T[P]
}; type Readonly<T> = {
readonly [P in keyof T]:T[P];
};

4 TypeScript 实战

4.1 TS实战-声明文件

  • declare:三方库需要类型声明文件
  • .dts:声明文件定义
  • @types:三方库TS类型包
  • tsconfig.json:定义TS的配置

4.2 TS实战-泛型约束后端接口类型

深入浅出 Typescript的更多相关文章

  1. 深入浅出TypeScript(1)

    前言 在学习TypeScript过程中,我也是遇到了很多的阻力,因为并未有太多深入挖掘的场景,之前做IONIC的时候,也只是用TS,现如今,这一个系列也是记录自己学习和收获,同时希望自己的这系列教程对 ...

  2. 深入浅出TypeScript(2)- 用TypeScript创建web项目

    前言 在第一篇中,我们简单介绍了TypeScript的一些简单语法,那么如果我们只是简单使用TypeScript开发一个web项目,应该做哪些准备?接下来我们就结合TypeScript和Webpack ...

  3. 深入浅出TypeScript(3)- 函数重载和泛型

    面向对象特性中,最根本的就是面向对象的三大基本特征:封装.继承.多态.同时,TypeScript中也存在多态的使用,比如函数重载,今天我们先看一下函数重载以及泛型的概念. 什么是函数重载 简单来说,函 ...

  4. 深入浅出TypeScript(4)- 使用接口和类型别名

    在TypeScript中,为了可以约束对象定义,提供了两个新的特性,接口和类型别名. TypeScript中的接口 在强类型语言中,都有接口的概念,那么TypeScript中的接口是如何使用的呢? 接 ...

  5. 深入浅出TypeScript(5)- 在React项目中使用TypeScript

    前言 在第二小节中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目. 准备 Webpack配置在第二小节 ...

  6. 深入浅出 Typescript 学习笔记

    TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准. TypeScript 由微软开发的自由和开源的编程语言. TypeScript 设计目标是开发大型应 ...

  7. 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

    [ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...

  8. NodeJs中require use get typescript及其他知识点集合

    NodeJs的Express使用 nodejs事件的监听与事件的触发 TypeScript学习笔记 深入浅出Node.js Nodejs开发Office插件 类百度文库文档上传.转换和展示功能项目开源 ...

  9. 深入浅出 Webpack

    深入浅出 Webpack 评价 Webpack 凭借强大的功能与良好的使用体验,已经成为目前最流行,社区最活跃的打包工具,是现代 Web 开发必须掌握的技能之一.作者结合自身的实战经验,介绍了 Web ...

  10. JavaScript深入浅出第4课:V8引擎是如何工作的?

    摘要: 性能彪悍的V8引擎. <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等 ...

随机推荐

  1. 2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线, 给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围, 给定一个数字m,表示你可以补种多

    2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线, 给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围, 给定一个数字m,表示你可以补种多 ...

  2. 原来.NET写的Linux桌面这么好看?

    如何使用Blazor在Linux平台下运行Desktop程序 本文将讲解如何使用Blazor运行跨平台应用,应用到的技术有以下几点 Blazor Masa Blazor Photino.Blazor ...

  3. Android Studio格式化代码

    有时候代码写来老师乱七八糟,手动格式化讷太浪费时间,且格式化不公正,最后当然使用ide自带的快捷键了 找到导航中的Code 下的 Reformat Code ; 看提示知道使用快捷键 就是Ctrl + ...

  4. Linux系统 2023年5月1号

    今天正式进入了LINUX基础核心  下载了centos7.4镜像 和vmware12版本,还未安装vmware和centos镜像7.4

  5. R 语言常用操作与函数汇总

    总结了一下 R 语言中常用的一些操作与函数使用,抛砖引玉,分享一下给大家,如有错误的地方欢迎留言指正. 怎样显示 R 软件中某个包中包含的全部数据集? > library(MASS)> d ...

  6. ChatGPT使用案例,助你快速上手,做事事半功倍

    ChatGPT介绍 首先我们来看一下chat-gpt自己的介绍: ChatGPT的发展历程 2015年,OpenAI成立,致力于研究和开发人工智能技术.在成立初期,OpenAI的创始人之一Elon M ...

  7. python 星号(*) 还能这么用

    哈喽大家好,我是咸鱼 今天跟大家介绍一下 python 当中星号(*)的一些用法 首先大家最常见的就是在 python 中 * 是乘法运算符,实现乘法 sum = 5 * 5 # 25 除此之外,还有 ...

  8. NoSQL数据库系统原理:从概念到实现

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2. 核心模块实现 3.3. ...

  9. Unity的AssetPostprocessor之Model:深入解析与实用案例 2

    Unity AssetPostprocessor中Model相关函数的实际应用 Unity AssetPostprocessor是Unity引擎中的一个重要功能,它可以在导入资源时自动一些脚本,以便对 ...

  10. Pyinstaller打包 Pytest+Allure成exe文件执行时,报错ERROR: usage: apitest.exe [options] [file_or_dir] [file_or_dir] [...] xxx.exe: error: unrecognized arguments: --alluredir=.\\report\\xml --clean-alluredir

    网上找了很多案例啊  都没解决问题,由本人的多次试验 终于成功解决 1.打包运行 pyinstaller -D  xxx.py 打包成功后  执行exe报错  如下 2.此情况是说明  命令无法正确识 ...