TypeScript介绍
TypeScript: 静态类型检查器
TypeScript为JS的超集 为强类型 JavaScript为弱类型
Ts === Js + 类型 js有的ts都有
TS 规范了 js类型声明 使它更严谨
快速上手
npm i -g typescript // 全局安装Typescript
tsc ts文件 每次都需要执行
tsc ts文件 --watch 保存就会运行,动态监听
类型注解
let age:number = 18
let name:string = "hello"
基础类型
原始类型
let username:string = "hello"
let age:number = 18
let sex:boolean = true
let job:null = null
let salary:undefined = undefined
export {}
对象类型
数组类型
let userList:string[] = ["一号","二号"]
userList.forEach(item=>{
console.log(item)
})
let numList:number[] = [1,2,3,436,5,7]
numList.forEach(item=> {
console.log(item)
})
let userList1:Array<string> = ["一号","二号"]
let numList1:Array<number> = [1,2,3,436,5,7]
函数类型
function add1(num1:number, num2:number):number {
return num1+num2
}
add1(1, 2)
let sum:number = add(1,2);
console.log(sum, '----');
const add2 = (num1:number, num2:number):number =>{
return num1+num2
}
let sum1:number = add2(1,4);
console.log(sum1, '----');
type CustomFunc = (num1:number, num2:number) => number
const add3: CustomFunc = () => {
return 123
}
let sum2:number = add3(1,4);
console.log(sum2, '----');
type CustomFunc2 = () => void
const add4: CustomFunc2 = () => {
return 1213
}
const add5 = () => {}
const add6 = ():void => {}
const add7 = ():undefined => undefined
对象类型
export {}
let person:{
username: string,
age: number,
run: Function
} = {
username: 'hello',
age: 18,
run:function () {
console.log('hello加油')
}
}
person.run()
let person2: {
run():string
} = {
run(){
return "hello"
}
}
let person3: {
run: () => string
} = {
run(){
return "hello"
}
}
type CustomObj = {
userName: string
age: number
run: () => string
}
let person4: CustomObj = {
userName: 'l',
age: 1,
run() {
return 'll'
}
}
TypeScript 新增类型
联合类型 |
let salary: number | string | null | undefined | boolean = "25k"
salary = 100
salary = null
salary = undefined
salary = true
let arr1:string[] | number[] = [3, 213, 221, 44, 21]
arr1 = ["1", "2"]
let arr2:Array<string | number> = ["1", 2, "2"]
let arr3:(string | number)[] = [1, 2, "2"]
交叉类型 &
自定义类型(类型别名)
let arr1:(string | number)[] = [1, 2, "2"]
let arr2:(string | number)[] = [1, 2, "2"]
let arr3:(string | number)[] = [1, 2, "2"]
type CustomArr = Array<string | number>
let arr4: CustomArr = [1,2,2]
接口 interface
export {}
interface IPeolple {
useranme: string
age: number
run: () => void
}
let num1: IPeolple = {
useranme: '132',
age: 1,
run: () => {
}
}
interface test1 {
x: number
y: number
}
interface test2 {
x: number
y: number
z: number
}
interface test2 extends test1 {
z: number
}
let test: test2 = {
x: 1,
y: 2,
z: 3
}
元祖 turple
export {}
let position: [number, number] = [1, 3]
字面量类型
let user = 'll'
const str = '124'
type dess = 'up' | 'down' | 'left' | 'right'
function test (qwe:dess) {
}
test('down')
let str1:1 = 1
枚举 enum
export {}
enum lis {
left = 1,
right,
up,
down,
}
function test (l:lis) {}
test(0)
test(1)
test(lis.left)
test(lis.right)
enum lis1 {
left = 'left',
right = 'right',
up = 'up',
down = 'down',
}
function test1 (wq:lis1) {}
test1(lis1.down)
test1(lis1.left)
对象的可选属性
type CustomObj = {
userName: string
age?: number
run?: () => string
}
let person4: CustomObj = {
userName: 'l',
}
any 任意类型
let str:any = ''
str = 1
str = true
str = Object
str = null
str = undefined
str = []
str = {}
可选参数
type CustomFunc = (start?:number, end?:number) => void
const slices: CustomFunc = () => {
}
slices()
slices(1)
slices(1,2)
类型推断(推论)
let useranme = 'hello'
useranme = '214'
const add = (num1: number, num2: number) => {
return num1+num2
}
add(1, 2)
function add1(num1: number, num2: number) {
return num1+num2
}
add1(1,2)
TS类型,兼容性及常用类型
ts类型断言
const link = document.getElementById('link') as HTMLAnchorElement
link.href = "https://www.baidu.com"
type test1 = {
user: string
age: number
}
type test2 = {
user: string
age: number
sex: string
}
let res1: test1 = {
user: 'name',
age: 19
}
res1 = {
user: 'name',
age: 19,
sex: 'man'
} as test2
ts中的typeof
console.log(typeof "hello")
let test = {
a: 1,
b: 2
}
type res = {
a: number
b: number
}
function sum (avg:res) {}
sum(test)
type testCum = typeof test
function sum1 (p: testCum) {}
sum1(test)
对象类型的兼容性
type test1 = {
name: string,
age: number,
sex: string,
address: string
salary: number
}
type test2 = {
name: string,
age: number,
sex: string
}
let res1:test1 = {
name: 'hello',
age: 18,
sex: 'nan',
address: '西安',
salary: 12
}
let res2: test2 = res1
函数类型的兼容性
const arr = ['a', 'b', 'c']
arr.forEach(()=>{})
arr.forEach((item)=>{})
arr.forEach((item, index)=>{})
arr.forEach((item, index, arr)=>{})
type test1 = (x: number) => void
type test2 = (x: number, y: number) => void
let fun1: test1 = (a: number) => {
return a
}
let fun2: test2 = fun1
泛型及用法
function test1 (value: string): string {
return value
}
function test2 (value: number): number {
return value
}
function test3 (value: boolean): boolean {
return value
}
function com<T>(value: T): T {
return value
}
com<string>('1')
com(1)
type test = <T>(value1: T, value2: T, value3: T) => T
let fun: test = (value) => {
return value
}
fun<number>(1,3,3)
泛型约束
type test = <T>(value: T[]) => T[]
let fun: test = (value) => {
console.log(value.length);
return value
}
fun(['1','2'])
interface ILength {
length: number
}
let x1:ILength = "hello"
let x2:ILength = [1,31,313]
type cus= <T extends ILength> (value: T) => T
let fun1: cus = (value) => {
return value
}
fun1("321321")
多个类型变量之间的约束
const obj = {name: "hello", age: 16, height: '180cm'}
function getKey (obj: {}, key: string) {}
getKey(obj, "wqe")
function getKey1<T extends object, Key extends keyof T>(obj:T, key: Key | ""){
}
getKey1(obj, 'age')
泛型接口
interface Fun1 {
fun: (val: string) => string
fun1: () => string[]
}
interface Fun2 {
fun: (val: number) => number
fun1: () => number[]
}
interface Fun3 {
fun: (val: object) => object
fun1: () => object[]
}
interface Test <T>{
fun: (val: T) => T
fun1?: () => T[]
}
let obj1: Test<number> = {fun(num){return num}}; obj1.fun(111);
let obj2: Test<object> = {fun(obj){return obj}}; obj2.fun({a:1});
let obj3: Test<string> = {fun(str){return str}}; obj3.fun('来了');
泛型工具 Partial
type test = {
name: string
height: number
money: number
address: string
is_marry: boolean
cmpany: string
wechat: string
}
let res: test = {
name: 'hello',
height: 180,
money: 10000,
address: '北京',
is_marry: true,
cmpany: "ll",
wechat: "hkj"
}
type test1 = Partial<test>
let res1:test1 = {}
res1.cmpany = "dfasf"
type Partial<T> = {
[P in keyof T]?: T[P];
}
ReadOnly 只读类型
type test = {
name: string
height: number
money: number
}
type res1 = Readonly<test>
let qw: test = {
name: 'hello',
height: 180,
money: 10000,
}
qw.money = 3214
let qw1: res1 = {
name: 'hello',
height: 180,
money: 10000,
}
qw1.name = "adsg"
Pick类型 构造新类型
interface Props {
id: number,
title: string,
children: number[]
}
type PickProps = Pick<Props, 'id'>;
let test:PickProps = {
id: 1,
title: '214'
}