一、前言
1.1什么是TypeScript
- TypeScript(简称:TS)是 JavaScript 的超集(JS 有的 TS 都有)。
- 从编程语言的动静来区分,TypeScript 属于静态类型的编程语言,JS 属于动态类型的编程语言。 静态类型:编译期做类型检查; 动态类型:执行期做类型检查。 代码编译和代码执行的顺序:先编译再执行。
- 由于TS,在编译时就开始做类型检查了,所以TS 可以提前到在编写代码的同时就发现代码中的错误,减少找 Bug、改 Bug 时间
1.2Ts与Js比较
二、TypeScript的数据类型
2.1概述
- 可以将 TS 中的常用基础类型细分为两类:JS 已有类型 与 TS 新增类型。
- JS已有数据类型:基本数据类型与引用数据类型
- 基本数据类型:number、string、boolean、null、undefined、symbol
- 引用数据类型:object(包括:数据array、函数function、对象等)
- TS新增类型
- 自定义类型(类型别名)、联合类型、接口、元组、自变量类型、枚举、void、any等等
2.2Ts使用Js基本数据类型
1 number
let number: number = 23
2 String
let myName: string = '123'
3 boolean
let isYouth: boolean = true
4 null
let a: null = null
5 undefined
let b: undefined = undefined
6 symbol
let s: symbol = Symbol()
7 小结
- 写法: 变量 :数据类型 = 类型值
- 通过数据类型为变量进行约束,从而只能给变量赋值该类型的值
2.3 Ts使用Js引用数据类型
1 数组(array)
-
一:变量:数据类型[] = ['该数据类型的值1','该数据类型值2'……]
const numbers: number[] = [1,2,4,5] // 该写法是一个纯数字数组数据类型,数组内只包含数字类型 const strs: string[] = ['1','2','3'] // 数组内只包含字符串类型 -
二:变量:Array<数据类型> = ['该数据类型的值1','该数据类型值2'……]
const numbers2: Array<number> = [1,2,4,5] const strs2: Array<string> = ['1','2','3']
针对于以上两种方法,只能定义一个数组,然后数组的值只能是纯规定数据类型的值,数组中不能又其他类型的值;如果一个数组中能有nuber、 string、boolean等多个数据类型在同一个数组中,需要使用联合数据类型:变量: (数据类型)[] = [字面量,……]
2 函数(function)
- 一:单独指定参数、返回值的类型
-
普通函数:function 函数名 (参数1: 参数类型, 参数2: 参数类型…): 函数返回数据类型 {}
-
箭头函数:const 函数名 = (参数1: 参数类型, 参数2: 参数类型…): 函数返回数据类型 => {}
function add (number1:number, number2: number): number { // 普通函数 return number1 + number2 } console.log(add(1,2)) const addFn = (number1:number, number2: string): string => { // 箭头函数 return number1 + number2 } console.log(addFn(2,'fv'))
- 二:同时指定参数、返回值的类型(这种方法适用于箭头函数)
-
const 函数名: (参数1: 参数类型,参数2: 参数类型…) => 函数返回数据类型 = (参数1,参数2) => {}
// 只适用于函数表达式,例子: const addFn: (number1:number, number2: string) => string = (number1,number2) => { return number1 + number2 }
- 如果函数没有返回值,那么,函数返回值类型为:void
- 使用函数实现某个功能时,参数可以传也可以不传。这种情况下,在给函数参数指定类型时,就用到可选参数了。
-
可选参数: 在可传可不传的参数名称后面添加 ?(问号)
-
注意:必填参数必须在可选参数之前
function mySlice(start:number,end?:number):void { console.log("开始:" + start + '结束' + end ) } mySlice(1) mySlice(1,6)
3 对象(object)
- JS中的对象是由属性和方法构成的,而TS 中对象的类型就是在描述对象的结构(有什么类型的属性和方法)。
- 直接使用{}来描述对象结构。属性采用属性名: 类型的形式,方法采用方法名(): 返回值类型的形式
- 如果方法有参数,就在方法名后面的小括号中指定参数类型(比如: greet(name: string): void )
- 在一行代码中指定对象的多个属性类型时,使用; / ,( 分号或者逗号) 来分隔
- 如果一行代码只指定一个属性类型( 通过换行来分隔多个属性类型),可以去掉;(分号)。
- 方法的类型也可以使用箭头函数形式(比如 :{sayHi: () => void1}
4 接口(interface)
-
当一个对象类型被多次使用时,一般会使用接口 (interface )来描述对象的类型,达到复用的目的
interface IPerson { name: string age: number, say:() => void, greet(name:string):void }
5 元组(tuple)
-
确切的控制了这个数据有多少个元素,以及元素的类型;
-
赋值多了会报错,不对应赋值也会报错
let position: [number, string] = [39, '114']