typescrip基础入门

node 环境配置

安装

npm i -g typescript (自带编译工具tsc)

ts 中的基本类型

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
}

你可能感兴趣的:(typescript)