TypeScript笔记(基础大全到井格游戏案例)

这篇博客详细介绍了TypeScript的基本概念,包括静态类型、弱类型以及核心设计理念。讲解了TypeScript的基础语法,如类型别名、数组、对象、枚举、接口、泛型和函数等,并探讨了类、模块和DOM操作。此外,还通过一个井字游戏案例展示了TypeScript在实际开发中的应用。
摘要由CSDN通过智能技术生成

TypeScript学习笔记

参考文档

参考视频

一、介绍

TypeScript(Typed JavaScript at Any Scale):添加了类型系统的 JavaScript,适用于任何规模的项目。TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行。

1.类型系统

说到ts比js新增的类型系统就不得不提到js的一个特点,js没有类型拘束,使得它的代码质量参差不齐,维护成本高,运行时错误多。

TypeScript 是静态类型

类型系统按照「类型检查的时机」来分类,可以分为动态类型静态类型

动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误JavaScript 是动态类型,没有编译阶段.

静态类型是指编译阶段就能确定每个变量的类型,这种语言的类型错误往往会导致语法错误TypeScript 是静态类型, 在运行前需要先编译为 JavaScript,而在编译阶段就会进行类型检查.

大部分 JavaScript 代码都只需要经过少量的修改(或者完全不用修改)就变成 TypeScript 代码,ts的强大的类型推论,使得不去手动声明变量 foo 的类型,也能在变量初始化时自动推论出它是一个 number 类型。

TypeScript 是弱类型

类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型弱类型

TypeScript 是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性,js和ts都是弱类型

在js和ts中:

console.log(1 + '1');
// 打印出字符串 '11'

Python 是强类型

print(1 + '1')
# 报错TypeError: unsupported operand type(s) for +: 'int' and 'str'

需要进行强制类型转换:

print(str(1) + '1')
# 打印出字符串 '11'

TypeScript 的核心设计理念:

在完整保留 JavaScript 运行时行为的基础上,通过引入静态类型系统来提高代码的可维护性,减少可能出现的 bug。

2.适用于任何规模

TypeScript 非常适用于大型项目——这是显而易见的,类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。

TypeScript 增强了编辑器(IDE)的功能,包括代码补全、接口提示、跳转到定义、代码重构等,这在很大程度上提高了开发效率。

  • 在 VSCode 编辑器中编写 JavaScript 时,代码补全和接口提示等功能就是通过 TypeScript Language Service 实现的:

    what-is-typescript-vscode

  • 一些第三方库原生支持了 TypeScript,在使用时就能获得代码补全了,比如 Vue 3.0.

  • 有一些第三方库原生不支持 TypeScript,但是可以通过安装社区维护的类型声明库[9](比如通过运行 npm install --save-dev @types/react 来安装 React 的类型声明库)来获得代码补全能力——不管是在 JavaScript 项目中还是在 TypeScript 中项目中都是支持的:

3.与标准同步发展

TypeScript 的另一个重要的特性就是坚持与 ECMAScript 标准同步发展。ECMAScript 是 JavaScript 核心语法的标准,自 2015 年起,每年都会发布一个新版本,包含一些新的语法。

什么是 TypeScript?(总结)

  • TypeScript 是添加了类型系统的 JavaScript,适用于任何规模的项目。
  • TypeScript 是一门静态类型、弱类型的语言。
  • TypeScript 是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性。
  • TypeScript 可以编译为 JavaScript,然后运行在浏览器、Node.js 等任何能运行 JavaScript 的环境中。
  • TypeScript 拥有很多编译选项,类型检查的严格程度由你决定。
  • TypeScript 可以和 JavaScript 共存,这意味着 JavaScript 项目能够渐进式的迁移到 TypeScript。
  • TypeScript 增强了编辑器(IDE)的功能,提供了代码补全、接口提示、跳转到定义、代码重构等能力。
  • TypeScript 拥有活跃的社区,大多数常用的第三方库都提供了类型声明。
  • TypeScript 与标准同步发展,符合最新的 ECMAScript 标准(stage 3)。

JavaScript 与 TypeScript 的区别

TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。

TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。

ts-2020-11-26-2

ts-2020-11-26-2

二、TypeScript 基础语法

TypeScript 程序由以下几个部分组成:

  • 模块
  • 函数
  • 变量
  • 语句和表达式
  • 注释

1.TypeScript基础类型:

ES6数据类型参考

数据类型 关键字 描述
任意类型 any 声明为 any 的变量可以赋予任意类型的值;如果是一个普通类型,在赋值过程中改变类型是不被允许的,但如果是 any 类型,则允许被赋值为任意类型;未申明类型的变量自东北识别为任意类型.
数值类型 number 双精度 64 位浮点值。它可以用来表示整数和分数。let binaryLiteral: number = 0b1010; // 二进制 let octalLiteral: number = 0o744; // 八进制 let decLiteral: number = 6; // 十进制 let hexLiteral: number = 0xf00d; // 十六进制
字符串类型 string 一个字符系列,使用单引号()或双引号(")来表示字符串类型。反引号(``)来定义多行文本和内嵌表达式。let name: string = "Runoob"; let years: number = 5; let words: string =您好,今年是 ${ name } 发布 ${ years + 1} 周年;
布尔类型 boolean 表示逻辑值:true 和 false。let flag: boolean = true;,不能将其它类型赋值给它
null null null是一个只有一个值的特殊类型。表示一个空对象引用。用 typeof 检测 null 返回是 object。用于初始化变量为一个未定义的值
undefined undefined Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值给其它类型.如果一个类型可能出现 null 或 undefined, 可以用 |来支持多种类型
元组 无[数据类型] 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。let x: [string, number]; x = ['Runoob', 1]; // 运行正常 x = [1, 'Runoob']; // 报错 console.log(x[0]); // 输出 Runoob
枚举 enum 枚举类型用于定义数值集合。enum Color {Red, Green=4, Blue};每个名字对应一个序列号 console.log(Color.Blue);// 输出 2 console.log(Color[4]);//输出green
void void 用于标识方法返回值的类型,表示该方法没有返回值。function hello(): void { alert("Hello Runoob"); }
never never never 表示永远不存在的类型,never 类型的变量只能被 never 类型所赋值.抛出异常或无法执行到终止点(例如无限循环)
对象 object 对象是包含一组键值对的实例。 值可以是标量、函数、数组元祖、对象等
symbol symbol() 直接调用symbol()不需要new,不能传对象,const s5=symbol('name')const info2={[s5]:'lison'}console.log(info2);

type 用法

1.类型别名:

类型别名用来给一个类型起个新名字。

//1.使用 type 创建类型别名
type Name = string;
//2. 类型别名常用于联合类型。
//返回值是string
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
   
    if (typeof n === 'string') {
   
        return n;
    } else {
   
        return n();
    }
}
console.log(getName('Name'));
//只能输入string类型的
//3. 和interface的用法差不多

数组

数组创建
  1. 在元素类型后面加上[]
let fibonacci: number[] = [1, 1, 2, 3, 5];
  1. 使用数组泛型

    let fibonacci: Array<number> = [1, 1, 2, 3, 5];
    
  2. 使用接口表示数组

    interface NumberArray {
         
        [index: number]: number;
    }
    let fibonacci: NumberArray = [1, 1, 2, 3, 5];
    
  3. 类数组

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸总女友带球跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值