外贸公司 如何做公司网站,找人做网站需要准备什么材料,婚庆影楼型网站开发,新闻发布会筹备方案typeScript基础使用与进阶 一、初始typeScript1.1 js的超集1.2 编译器编译为js代码1.3 完全兼容js1.4 静态类型检查器 二、ts的安装与编译2.1 ts的安装2.2 ts编译成js2.2.1 手动编译2.2.2 自动编译 三、ts基础使用3.1 类型声明3.1.1 基础类型3.1.2 数组3.1.3 对象3.1.4 any类型… typeScript基础使用与进阶 一、初始typeScript1.1 js的超集1.2 编译器编译为js代码1.3 完全兼容js1.4 静态类型检查器 二、ts的安装与编译2.1 ts的安装2.2 ts编译成js2.2.1 手动编译2.2.2 自动编译 三、ts基础使用3.1 类型声明3.1.1 基础类型3.1.2 数组3.1.3 对象3.1.4 any类型3.1.5 void类型3.1.6 类型推断3.1.7 联合类型 3.2 接口3.2.1 对象类型3.2.2 数组类型3.2.3 函数类型 3.3 函数3.3.1 函数声明和函数表达式3.3.2 可选参数和默认参数3.3.3 剩余参数和函数重载3.3.4 类型断言 四、ts进阶4.1 类型别名4.2 字符串字面量4.3 元组4.4 枚举4.5 泛型的简单使用4.6 泛型约束4.7 泛型接口 一、初始typeScript
typeScript官网typeScript中文文档
1.1 js的超集
1.包含js的所有元素2.能运行js代码3.支持es语法4.是一种开源开平台的项目
1.2 编译器编译为js代码
编译器将ts代码编译为js代码,js解析器执行
1.3 完全兼容js
1.4 静态类型检查器
1.静态类型,更加严格的语法2.减少运行时异常出现的几率3.便于后期维护
二、ts的安装与编译
2.1 ts的安装
终端命令执行
npm install -g typescript检测ts版本
tsc -v2.2 ts编译成js
2.2.1 手动编译
终端执行 tsc (文件).js 会生成xxx.js文件
tsc xxx.js2.2.2 自动编译
1.执行初始化 打开终端 执行命令
tsc --init2.修改生成的配置文件 tsconfig.json
//文件的存放位置outDir: ./js//关闭严格模式strict: false3.启动监视任务 1.打开终端 运行任务 2.运行任务显示所有任务监视tsconfig.json
三、ts基础使用
3.1 类型声明
3.1.1 基础类型 布尔类型 boolean let flag: boolean true
flag false数字类型 number //数字类型 支持不同进制
let decLiteral: number 6;
let hexLiteral: number 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number 0o744;
let notANumber: number NaN;
let infinityNumber: number Infinity;字符串类型 string let myName: string Tom;
let myAge: number 25;// 模板字符串
let sentence: string Hello, my name is ${myName}.
Ill be ${myAge 1} years old next month.;undefined和null 类型 //undfined null类型 用的不多
let u: undefined undefined
let n: null null3.1.2 数组
//定义数组
//第一种方式
let arr1: number[] [1, 2, 3, 4, 5]
arr1 [3, 4, 5, 6, 7]
//第二种方式 泛型
let arr2: Arraynumber [1, 2, 3, 4, 5]3.1.3 对象
// object 表示非原始类型除了number、string、boolean之外的类型
let obj:object{}
// 字面量
// obj123 报错
// obj 报错
objnull
objundefined
obj[]
objnew String()
objString3.1.4 any类型
//any 任何类型
let h: any 123
h true
h 123
h {age: 张三,
}let arr: any[] [100, 2, , true]
//报错
console.log(arr[0].split())
3.1.5 void类型
//表示空值 表示没有任何返回值的函数
function test1(): void {console.log(test1)
}
console.log(test1())//表示没有任何类型
let v: void undefined3.1.6 类型推断
ts在没有明确的指定类型的时候推测一个类型1.定义变量的时候直接给变量赋值则定义类型为对应的类型2.定义变量的时候没有赋值则定义类型为any类型
//两种情况
//1.定义变量直接赋值 赋值类型则定义为相对应的类型
let a 1
a 2//2.定义变量的时候 没有赋值 只声明了没有赋值 会被定义为any
let g
g 123
g
g {}
3.1.7 联合类型
// 表示取值可以为多种类型中的一种
// flag true,1 false,0 ||
let f: boolean | number | string true
// 只能访问此联合类型的所有类型里共有的属性或方法
// f 123 //再次赋值走类型推断给变量定义一个类型
f123
// ftrue
console.log(f.toString());
3.2 接口
定义它是对行为的抽象,用于对「对象的形状Shape」进行描述理解为一种约束接口一般首字母大写 建议加上I?表示可选属性 可有可无[propName: string]: any 任意属性定义 和任意属性值readonly 只读属性
3.2.1 对象类型
//定义接口
//接口一般首字母大写 建议加上I
// ?表示可选属性 可有可无
// [propName: string]: any 任意属性定义 和任意属性值
//readonly 只读属性
interface IPerson {readonly id: numbername: stringage: numbersex?: string[propName: string]: string | number
}
let p: IPerson {id: 10,name: 张三,age: 18,// sex: 男,width: ,
}
//报错 只读属性
p.id 103.2.2 数组类型
// 不常用理解
interface INewArray{[index:number]:number//任意属性index表示数组中的下标
}
// [1,2,3,4] arr[0]--obj[name]
// 0,1,2,3
let arr:INewArray[1,2,3,4]3.2.3 函数类型
//参数 返回值
interface IsearchFunc {// (参数:类型....):返回值的类型(a: string, b: string): boolean
}
const fun1: IsearchFunc function (a: string, b: string): boolean {return true
}
fun1(a, b)3.3 函数
3.3.1 函数声明和函数表达式
//命名函数 (函数声明)
function add1(a, b) {return a b
}//函数表达式 (匿名函数)
let add2 function (a, b) {return a b
}//ts中函数声明 命名函数
function add3(a: number, b: number): number {return a b
}let c: number add3(1, 2)
//函数表达式 匿名函数
let add4 function (a: number, b: number): number {return a b
}//ts函数完整的写法
let add5: (a: number, b: number) number function (a: number,b: number
): number {return a b
}
3.3.2 可选参数和默认参数
//可选参数 必选参数不能位于可选参数后
let getName function (x: string 李, y?: string) {return x y
}// getName(张, 三)
getName()
3.3.3 剩余参数和函数重载
//剩余参数
function fn(x: string, y: string, ...args: number[]) {console.log(x, y, args)
}
fn(, , 1, 2, 3, 4, 5)//函数重载 函数名相同 形参不同的多个函数
//数字 相加 字符串 拼接
function fn1(x: string | number, y: string | number): string | number | void {if (typeof x string typeof y string) {//字符串拼接return x y} else if (typeof x number typeof y number) {//数字相加return x y}
}
fn1(1, 2)
3.3.4 类型断言
//定义一个函数 获取到一个数字或者字符串的长度
//类型断言:手动指定一个类型
//两种方式
//1.通过as 变量 as 类型
//2.通过类型变量
function getLength(x: string | number): number {if ((x as string).length) {return (stringx).length} else {return x.toString().length}
}
//2.通过类型变量
getLength(123)
getLength(123)//将任何一个类型断言为any,any类型是访问任何属性的方法的
;(window as any).a 10function abc(x: any, y: any): any {return x y
}
let a abc(1, 2) as number //类型断言
let b abc(x, y) as string
四、ts进阶
4.1 类型别名
通过type去定义 用来给一个类型起个新名字
//通过type 类型别名
type s string
let str: s 123
//常用于联合类型
type s1 string | number | boolean
let a: s1 123
let b: s1 123
4.2 字符串字面量
通过type去定义 用来约束取值只能是某几个字符串中的一个
//字符串字面量类型 约束取值只能是某几个字符串中的一个//张三丰 ,张三 张大炮
type stringType 张三丰 | 张三 | 张大炮
let names: stringType 张三4.3 元组
合并了不同类型的对象
let arr: number[] [1, 2, 3, 4, 5]//数值和字符串//元组合并了不同类型的对象let Tarr: [number, string] [1, 2]//元组添加东西 需要是number或者string类型string
Tarr.push(2, 5)//报错
Tarr.push(true)
4.4 枚举
给一组数值赋予名称
//使用枚举类型给一组数值赋予名称
//可以通过名称拿取值 还可以通过值拿去名称
//1,2,3,4
enum NumberType {one 1, //手动赋值 没有赋值 第一个参数默认为0two, //后边的值不定义 会根据前边的值 进行累加three,four,
}
//手动赋值 尽量不要写一些重复的值
console.log(NumberType.one)//枚举项有两种类型常数项constant member和计算所得项computed member
enum color {red,blue blue.length,//计算所得项需要放置在已经确定赋值的枚举项之前 后边不要再存放为手动赋值的枚举项// green,green 3,
}//常数枚举是使用 const enum 定义的枚举类型
// 常数枚举与普通枚举的区别是它会在编译阶段被删除并且不能包含计算成员
const enum Obj {o,b,//报错// jj.length,
}//外部枚举 Ambient Enums是使用 declare enum 定义的枚举类型
declare enum B {a,b,c,
}
4.5 泛型的简单使用
在定义时不需要先确定类型而是使用的时候再去确定
//需求 定义一个函数,传入两个参数 第一个参数是数据 第二个参数是数量
// 函数的作呕给你:根据数量产生对应个数的数据,存放在一个数组中
//(123,3)[123,123,123]function getArr(value: number, count: number): number[] {const arr: number[] []for (let i 0; i count; i) {arr.push(value)}return arr
}//原则上不推荐使用any
//使用泛型 在定义时不需要先确定类型 而是使用的时候再去确定
//没有确定的话 追走类型推断
//T表示任意输入的类型
function getArr2T(value: T, count: number): T[] {const arr: T[] []for (let i 0; i count; i) {arr.push(value)}return arr
}getArr2(123, 3)
getArr2string(123, 2)
4.6 泛型约束
//获取一个参数的长度
function getLengthT extends Ilength(x: T): number {return x.length
}
//使用泛型约束 约束任意输入的类型 必须要有length属性
interface Ilength {length: number
}
getLength(123)
4.7 泛型接口
//定义一个泛型接口
interface Iarr {T(value: T, count: number): ArrayT
}let getArr1: Iarr function T(value: T, count: number): T[] {const arr: T[] []for (let i 0; i count; i) {arr.push(value)}return arr
}