ts入门

67 阅读2分钟

准备工作

npm i -g typescript

编译tsc xx.ts

如果变量的声明和赋值是同时进行的 TS可以自动对变量进行类型检测

let c = false   
//等价于
//let c :boolean = falsec=123 // 报错
//函数参数、返回值类型声明
function sum(a:number,b:number):number {
    return a+b;
    //return 'a' 报错
}
​
sum(123,'456',789) //出现报错
//使用字面量进行类型声明
let a:10
a=10
a=11//报错
​
//可以使用| 来连接多个类型(联合类型)
let b: 'male'|'female'
​
b='male'
b='female'
​
let c :boolean | string
c = true
c = 'abc'

any

let a:any
a=10
a='a' 
//与js无区别 相当于对该变量关闭了TS的类型检测
​
​
let a 
//声明变量不指定类型 TS解析器会自动判断类型为anylet a:any
a=true
let b:number
b=a 
//a的类型是any 同时可以赋值给任意变量(包括其他类型)

unknown

  • 安全的any、
  • 不能直接赋值给其他变量
let e :unknown
​
let s :string
e='halo'
s='halo'
s=e //报错  e是unknown类型  不能赋给别的类型
​
//解决方法
if(typeof e ==='string') s = e
​
​
​

类型断言

  • 变量as类型
  • <类型>变量
let e :unknown
​
e = 'a'let b:string
b=e as string
b=<string> e

void 用来表示空 以函数为例 表示没有返回值的函数

 function s(a:number):void {
    return true //报错
     return undefined
     return null
 }

never 表示永远不会返回结果 函数无终点 捕获异常

 function fn () :never {
    throw Error('err')
     //报错后函数停止 无终点
 }

object

let a:object
a = {}
a = function () {
    
} 
//不会报错 函数也是object
​
let b:{name:string}
// 语法 {属性名:属性值类型,属性名:属性值类型}
​
b={}//报错 没有name属性
b={name:'abc'}
b={name:'abc',age:18} //报错 必须和声明一模一样
​
​
let b:{name:string,age?:number}
//  问号 表示非必须
b={name:'abc'} //因为? 所以不会报错
b={name:'abc',age:18} //报错 必须和声明一模一样
       
       
​

要求有name属性 其他属性不管

let c:{name:string,[prop:string]:any}
c = {name:'a',b:1,c:true,d:'s'} 

定义函数

  • (形参:类型,形参:类型) => 返回值或其类型
let d :(a:number,b:number) => number

数组

let e: string[] 
//另一种写法 let e:Array<number>
​
e = [1,2,3,4] // 报错
e = ['1','2','3']

元组:固定长度的数组

  • [类型,类型]
let h:[string,number]
​
h =['1','2'] //报错 类型不对

枚举

enum Gender {
    male ,
    female 
}
let i:{name:string,gender:Gender}
i = {
    name:'s',
    gender:Gender.male
}

&

let j:{name:string}&{age:number}
​
j = {
    name:'s',
    age:1
}

type 给类型起别名

type mtype = string|numberlet k:mtype
let l:mtype

\