安装
npm i -g typescript (自带编译工具tsc)
number:数字
-string:字符串
-boolean:布尔
-Array:数组
let num:Array<number>//数字类型的数组 约束 或者 let num:number[]
-object:对象
-null 和 undefined 是所有类型的子类型 可以通过tsconfig进行配置 进行严格判断
let obj:object = {
}
#其他常用类型
-联合类型
类型保护:当对某个变量进行类型判断后,在判断语句中可以确定其确切类型;比如typeof方法触发
let exam:number | string;
-void 表示返回值为空,一般用来约束函数返回值
-never 表示函数永远不会结束 比如throw 错误的函数
-字面量类型
let obj:'男' | '女';//只能取男或女
let obj:{
name:string,
age:number
}
obj = {
name:'1',
age:2
}
-元组类型 一个有限长度的数组且每一项的类型是确定
-any类型:任何类型,可以绕过两类型检查
类型别名
type u= {
name:string,
gender:'男'|'女'
}
function test(arg:u):[]{
return []
}
test({
name:"zhangsan",
gender:'男'
})
函数相关
函数重载:在函数实现之前,对一个函数的多种情况进行声明;
//函数约束
function test(a:number):numder{
}
function test(a:string):string{
}
//可选参数
function test(a:string,b?:string){}
function test(a;string,b:string = "默认"){} //默认参数一定可选参数
枚举
即有确定的取值范围 字段值可以使数字或字符串
枚举参与编译 编译的结果是真实值
数字枚举可不赋值可根据第一个值进行自动推导自增;
比如enum level= {
num1,
num2,
}
let n:level = 1;
=>num2 = 2;
注意:使用枚举时尽量使用逻辑值 即名称;
尽量不要在一个枚举中出现数字有出现字符串字段;
enum Gender{
male = "男",
femal= "女"
}
let gender:Gender = Genger.femal;
gender = Gender.male;
##枚举的位运算
例:权限组合
enum PermissionAuthr {
Read = 1,
Write = 2,
Create = 4,
Delete = 8
}
//判断是否有某个权限
function hasP(target:PermissionAuthr,per:PermissionAuthr){
return (target & per) === per
}
hasP(PermissionAuthr.Create | PermissionAuthr.Delete,PermissionAuthr.Create)
//去除某个权限
let p = PermissionAuthr.Create | PermissionAuthr.Delete;
p = p^PermissionAuthr.Write //位运算相同为0 不同为1
#扩展类型 接口
ts接口:用来越约束类,对象、函数的标准。
```ts
//用来约束类
interface User{
name:string,
age:number,
sayHello:()=> void
}
let u:User = {
name:'zhangsan',
age:33,
sayHello:function(){
}
}
type condition = (N:number)=>boolean; //类型别名约束函数
function sum(array:number[],calback:condition){
let s = 0;
array.forEach((n)=>{
if(calback(n)){
s += n
}
})
return s
}
interface conditions {
(n:number):boolean; //接口约束函数
}
function sum2(array:number[],calback:condition){
let s = 0;
array.forEach((n)=>{
if(calback(n)){
s += n
}
})
return s
}
接口可以继承
子接口不能覆盖父接口成员
interface A {
t1:String
}
interface C{
t3:String
}
interface B extends A{
t2:number
}
interface B extends A,C{
t2:number
}
let group:B = {
t1:"HELLO",
t2:2
}
//用类型别名实现类似的组合效果 交叉类型
let group:C = {
t1:"HELLO",
t2:2
}
type C = {
} & A & B
readonly
只读修饰符,修饰的目标是只读的
interface User2{
name:string,
readonly id:number
}
let u2:User2 = {
name:"zhangsan",
id:2
}