zoukankan      html  css  js  c++  java
  • TypeScript 一

    windows 安装

    npm install -g typescript

    macos安装

    brew install typescript    

    项目安装TS

    除了全局安装外,也可以在项目中独立安装 typescript,这可以限定项目使用的 typescript 版本

    yarn init -y

    安装 typescript

    yarn add -D typescript

    查看版本

    yarn tsc -v

    编译 TS

    我们使用 tsc 命令可以将 ts 文件编译为js 文件,如果在编译过程中有 ts 错误将在命令行报出

    tsc hd.ts //会编译生成 hd.js 文件

    第次修改 ts 文件后再执行命令编译会过于繁琐,可以执行以下命令自动监听ts 文件内容并自动生成 js 文件

    tsc hd.ts -w

    类型校验

    下面没有使用类型限制时,函数参数传入字符串也是可以执行的,显示这个结果是不对的

    function sum(a,b){
        return a+b;
    }
    
    console.log(sum('a',3)); //结果为 a3

    加上严格类型后,在编译环节就会提示错误

    function sum(a:number,b:number){
        return a+b;
    }
    
    console.log(sum('a',3)) 
    //报错 Argument of type 'string' is not assignable to parameter of type 'number'.

    TS中 的类型

    //声明一个变量a  并指定它的类型  以后只能使用指定的类型
    let a:number;
    
    let b:string;
    
    let c:boolean;
    
    //null 和 undefined
    //undefined和null两者各自有自己的类型分别叫做undefined和null。 和 void相似,它们的本身的类型用处不是很大:
    let u:undefined=undefined;
    let n:null=null;
    /*
    默认情况下null和undefined是所有类型的子类型。 就是说你可以把 null和undefined赋值给number类型的变量。
    
    然而,当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自。 这能避免 很多常见的问题。 也许在某处你想传入一个 string或null或undefined,你可以使用联合类型string | null | undefined。 再次说明,稍后我们会介绍联合类型。
    */
    //函数
    function sum(h:number,j:number):number{
        return h+j;
    }
    console.log(sum(1,2))
    
    //声明变量直接赋值
    let f:number=123;
    let g:string="hello";
    
    
    
    
    
    
    //Any
    //有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any类型来标记这些变量:
    let list2:any[]=[1,'true','string']
    
    
    
    /*Object
    object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
    */
    
    //any 不光关闭了自身的类型检测 还关闭它赋值的其他元素的类型检测
    let Y:any;
    let s:string;
    s=Y;
    
    
    //unknow 不确定类型时候 使用unknow 
    let X:unknown;
    //unknow 类型的变量不能直接赋值给其他变量  需要进行判断
    if(typeof X==='string'){
        s=X
    }
    //或者类型断言 (强制告诉编译器 变量实际类型)
    s=X as string;
    
    /*
    类型断言 两种方式
    <类型>变量  <string> e
    变量 as 类型  X as string
    */
    
    
    
    //Void:空值 
    //声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:
    function fn():void{
    
    }
    //Never never类型表示的是那些永不存在的值的类型(没有返回值)
    function fn2():never{
        throw new Error('something is rong')
    }
    
    //object 表示一个js 对象
    let obj:object;
    obj={};
    obj=function(){
    
    }
    
    //{}用来指定对象中可以包含哪些属性
    //语法   {属性名:属性值,属性名:属性值}
    //在属性名后面加上?,表示属性是可以选的
    let obj1:{name:string,age?:number}
    obj1={name:'张三',age:18}
    //{propName:string,[propName:string]:any} 表示任意类型属性
    
    let obj2:{name:string,[propName:string]:any}
    obj2={name:'张武',age:18,sex:'男'}
    
    
    /*
    设置函数结构的类型声明
    语法:(形参:类型,形参:类型,。。。。)=>返回值
    */ 
    let fn3:(a:number,b:number)=>number;
    fn3=function(a:number,b:number):number{
        return 10;
    }
    
    
    //数组
    //第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组:
    let  list:number[]=[1,2,3,4]
    //泛型第二种方式是使用数组泛型,Array<元素类型>:
    let list1:Array<number | string>
    
    list1=[1,2,3,'hello']
    
    
    /*
    元组 tuple(固定类型和长度的数组 定义之后不可以修改)
    语法:[类型,类型,类型]
    */
    let x:[string,number];
    x=['hello',1];
    // x=[10,'hello']
    console.log(x[0].substring(0,1))
    
    
    
    //枚举enum
    //enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。
    //枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射:
    enum Color {Red,Green,Blue}
    console.log(Color['Red']===0)//true
    console.log(Color['Green']===1)//true
    console.log(Color['Blue']===2)//true
    
    console.log(Color[0])//Red
    console.log(Color[1])//Green
    console.log(Color[2])//Blue
    
    
    
    //& 与 |或
    let j1:{name:string} & {age:number};//j1同时具备name 和age 两个属性及其类型
    let j2:Array<string|number>
    
    //类型别名  当某个类型很长时 不方便用时 可以写个别名代替
    type mytype=1|2|3|4|5|6;//别名
    let k:mytype;
    let l:mytype;
    let m:mytype;
    View Code
  • 相关阅读:
    为什么我要学习qt quick
    geometory Intersect
    删除kubernetes节点的正确姿势
    乞丐版docker私有仓库搭建
    kubernetes集群中由于某些原因导致etcd节点没有删干净,需要手动清理etcd节点
    k8s coredns设置上游name server
    虚拟机架设koolshare软路由
    文件类型特征码
    深入字节码 -- 计算方法执行时间
    启迪思维:二叉树
  • 原文地址:https://www.cnblogs.com/lvlisn/p/15413919.html
Copyright © 2011-2022 走看看