• 了不起的typescript


    //TypeScript-基本数据类型和报错解析
    
    //基本数据类型
    //let num = 25;
    /* let flo = 25.5;
    let hex = 0xf000;
    let binary = 0b1001;
    let octal = 0o733; */
    
    //重新赋值
    //num = '25';//不能存储非原有数据类型的数据
    
    //ts 原型
    //let num:number = 25; //等同于 let num = 25;
    
    
    //booleab
    //let islogin = false;
    let islogin:boolean = false;
    islogin = true;
    
    
    //string
    let str:string = "hello world";
    str = "12";
    
    let anything;//这样做是可以的 等同于 let anything:any
    anything = 25;
    anything = "hello";

    
    

      

    //数组 元组 枚举
    
    //数据
    let names:Array<string> = ["shaozhu","douddouy","chixing"];
    console.log(names);
    //names[0] = 100;//不能这样写
    names[0] = "hhee";//这样写可以
    
    
    
    let numbers:number[] = [1,2];//也可以这样写 数字数组
    let anyarray :any[] = [1,true,"11"];//这样什么数据都可以写
    
    
    //元组
    let colors:[string,number] = ["try",99];//这个是按照顺序的 不能换顺序
    
    
    
    //枚举 enum
    enum Color{
        Black = 100,
        Yellow,
        Red,
        Blue
    }
    
    let myColor:Color = Color.Red;
    console.log(myColor);//值是 从0开始的
    

      

    //TypeScript-函数类型
    //函数的相关类型
    
    //必须返回字符串 函数返回值的类型
    function returnvalue():string{
        return "hello";
    }
    
    console.log(returnvalue());
    
    
    //没有任何返回值
    function sayhello():void{
        console.log("hello !@");
    }
    
    
    //参数类型 指定传的参数
    function sumvalue(value1:number,value2:number):number{
        return value1+value2;
    }
    
    console.log(sumvalue(10,6));
    
    
    //函数类型
    let myfunc:(a:number,b:number)=>number;// 声明传的参数和返回的类型
    myfunc = sumvalue;
    //myfunc(10,20);
    console.log(myfunc(10,20));
    

      

    //TypeScript-对象类型和type
    
    let dataobj:{name:string,age:number} = {
        name:"shaozhu",
        age:31
    }
    
    dataobj = {
        name:"1222",
        age:25
    };
    
    
    //复杂的对象类型
    let complex:{data:number[],myfunc:(item:number)=>number} = {
        data:[12,23,364,6564],
        myfunc:function(item:number):number{
            return item+1;
        }
    }
    
    
    //type 生成类型 可以复用
    
    type Mytype = {data:number[],myfunc:(item:number)=>number} 
    let complex2:Mytype = {
        data:[12,23,364,6564],
        myfunc:function(item:number):number{
            return item+1;
        }
    }
    

      

    //TypeScript-never和null类型
    //uni type  检查类型 null undefined never
    
    let uniintype:number|string|boolean = 12;
    uniintype = "12";
    uniintype = false;
    
    
    //检查类型
    let checktype = 10;
    if(typeof checktype == "number"){
        console.log("1");
    }
    
    
    //null 和 undefined
    let mynull = null;
    mynull = undefined;
    
    //never 类型 任何类型的子类型
    //never  never类型是任何类型的子类型 也可以赋值给任何类型 然后 没有类型是
    //never 的类型或者可以赋值给never 
    //另外 (处理never 本身之外) 即使any和不可以赋值给never
    //通常表现为抛出异常或无法执行到终止点 (例如无限循环)
    
    let x:never;
    //x = 123;
    //不能将其它类型转换为 never 类型
    
    
    ///never 使用场景 抛出异常
    function error(message:string):never{
        throw new Error(message);
    }
    
    
    //死循环
    function loop():never{
        while(true){
    
        }
    }
    
    
    //异常也是 never
    let y:number;
    y = (()=>{
        throw new Error("message");
    })()
    

      

    //TypeScript-类型练习
    type sunmvalue = {money:number,count:(val:number)=>void}
    
    let sumvalue:sunmvalue = {
        money:200,
        count:function(value:number):void{
            this.money += value;
        }
    }
    
    
    let handleCount:{name:string,symvalue:sunmvalue,friends:string[]} = {
        name:"henry",
        symvalue:sumvalue,
        friends:["bucky","elyse","hhe"]
    };
    
    
    
    handleCount.symvalue.count(500);
    console.log(handleCount);
    

      

    //TypeScript-类(属性和方法)
    
    //public 公开的 
    //private 私有的
    //protected 被保护的
    
    class Person{
        public name:string;
        protected gender:string;
        private age:number=27;
        constructor(name:string,public username:string,gender:string){
            this.name = name;
            this.username = username;
            this.gender = gender;
        };
    
        printAge(age:number){
            console.log(this.age);
            this.age = age;
        };
        setGender(gender:string){
            this.gender =gender;
            console.log(this.gender);
        }
    }
    
    
    
    
    const person = new Person("shaozhu","hhhe","122");
    console.log(person.name);
    console.log(person.username);
    
    person.printAge(30);
    person.setGender("女")
    

      

    //TypeScript-类(属性和方法)
    
    //public 公开的 
    //private 私有的
    //protected 被保护的
    
    class Person{
        public name:string;
        protected gender:string;
        private age:number=27;
        constructor(name:string,public username:string,gender:string){
            this.name = name;
            this.username = username;
            this.gender = gender;
        };
    
        printAge(age:number){
            //console.log(this.age);
            this.age = age;
        };
        setGender(gender:string){
            this.gender =gender;
            //console.log(this.gender);
        }
    }
    
    
    
    
    const person = new Person("shaozhu","hhhe","122");
    //console.log(person.name);
    //console.log(person.username);
    
    person.printAge(30);
    person.setGender("女")
    
    
    
    //TypeScript-类的继承
    //接着上面的代码写
    
    
    class Student extends Person{
        public ssid:number=1124;
        constructor(name:string,username:string,gender:string,ssid:number){//
            super(name,username,gender);
    
            this.ssid = ssid;//让父类的东西可以在子类看到
            //console.log(this.gender);//yes
            //console.log(this.age);//no
    
            this.setGender("女");
        }
    }
    
    
    const misterxie = new Student("xiexie","xiexie1","xiexie2",1024);
    console.log(misterxie.name,misterxie);
    
    misterxie.printAge(22);
    

      

    //TypeScript-set和get和static
    //1.class set get 修饰词 用于隔离私有属性 和可公开属性
    //2. class 静态属性和方法
    
    class Person{
        private _name:string = "shaozhu";
    
        static PI:number=3.14;//静态属性
    
        static callccirle(value:number):number{
            return this.PI*value;
        };
    
        //私有属性赋值
        set setname(value:string){
            this._name=value;
        }
    
        //私有属性取值
        get getname(){
            return this._name;
        }
    }
    
    /* let person = new Person();
    console.log(person.getname)
    person.setname = "xiexie"
    console.log(person.getname)
    console.log(person.PI)// 静态的不能这样取 */
    
    
    console.log(Person.PI)
    console.log(Person.callccirle(8));
    

      

    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    
    namespace MyNath{
    
        export const PI = 3.14;
    
        export function sumvalue(num1:number,num2:number):number{
            return num2+num1;
        }
    
        export function calcacirle(value:number):number{
            return value*PI;
        }
    
    }
    
    const PI = 2.88;
    
    
    console.log(MyNath.sumvalue(5,10));
    
    console.log(PI);
    
    console.log(MyNath.PI);
    

      

    //TypeScript-命名空间文件拆分 !!!!!
    
    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    
    //sumvalue.ts
    
    namespace MyNath{
        export function sumvalue(num1:number,num2:number):number{
            return num2+num1;
        }
    }
    
    //TypeScript-命名空间文件拆分
    
    //-------------------------------------------------
    
    //calcacirle.ts
    
    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    //TypeScript-命名空间文件拆分
    namespace MyNath{
        const PI = 3.14;
        export function calcacirle(value:number):number{
            return value*PI;
        }
    
    }
    
    //-------------------------------------------------
    
    app.ts
    
    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    
    
    console.log(MyNath.sumvalue(5,10));
    
    console.log(MyNath.calcacirle(8));
    
    
    //TypeScript-命名空间文件拆分
    
    //编译命名空间
    //tsc --outfile app.js  sumvalue.ts calcacirle.ts app.ts
    

      

    //多个文件合并
    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    
    /// <reference path="calcacirle.ts" />
    /// <reference path="sumvalue.ts" />
    
    
    
    console.log(MyNath.sumvalue(5,10));
    
    console.log(MyNath.calcacirle(8));
    console.log(MyNath.shaozhu.shaozhuwl(100,10));
    
    //TypeScript-命名空间文件拆分
    
    //编译命名空间
    //tsc --outfile app.js  sumvalue.ts calcacirle.ts app.ts
    
    
    
    
    //多重命名空间 引入后编译 F是大写
    ///tsc app.ts --outFile app.js
    
    
    //--------------------上面这个是app.ts----------------------
    
    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    
    namespace MyNath{
        export function sumvalue(num1:number,num2:number):number{
            return num2+num1;
        }
    
        //多重命名空间 
        export namespace shaozhu{
            export function shaozhuwl(value1:number,vaule2:number):number{
                return value1-vaule2;
            }
        }
    }
    
    //TypeScript-命名空间文件拆分
    
    
    //--------------------上面这个是sumvalue.ts----------------------
    
    
    //TypeScript-初识命名空间namespace
    //命令空间 namespace
    //export 声明允许访问
    //TypeScript-命名空间文件拆分
    namespace MyNath{
        const PI = 3.14;
        export function calcacirle(value:number):number{
            return value*PI;
        }
    
    }
    
    
    //--------------------上面这个是calcacirle.ts----------------------
    
    //编译命令
    //多重命名空间 引入后编译 F是大写
    ///tsc app.ts --outFile app.js
    

      

    //模块化引入 重点哦!!
    
    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>TS第一课</title>
        <script src="https://cdn.bootcss.com/systemjs/0.20.15/system.js"></script>
    </head>
    <body>
        
        <!-- <script src="./app.js"></script> -->
        <script>
            System.config({
                baseUrl:"/",
                packages:{
                    "/":{
                        defayltExtension:"js",
                    }
                }
            });
    
            System.import("app.js");
        </script>
    </body>
    </html>
    
    ---------------上面的是html-------------------
    
    
    //TypeScript-模块module的使用 模块么么哒
    
    
    //import {PI,calcacirle} from "./stuff/calcacirle";
    
    import * as circl from "./stuff/calcacirle";
    
    
    import {sumvalue,shaozhuwl} from "./stuff/sumvalue"
    
    console.log(circl.PI);
    
    console.log(circl.calcacirle(8));
    
    
    console.log(sumvalue(10,900));
    console.log(shaozhuwl(100,90));
    
    //编译 tsc
    
    ---------------上面的是app.ts------------------
    
    
    export const PI = 3.14;
    export function calcacirle(value:number):number{
        return value*PI;
    }
    
    ---------------上面的是calcacirle.ts------------------
    
    
    //export 声明允许访问
    //也可以用 export.default
    
    
    
    export function sumvalue(num1:number,num2:number):number{
        return num2+num1;
    }
    
    //多重命名空间 
    
    export function shaozhuwl(value1:number,vaule2:number):number{
        return value1-vaule2;
    }
    
    
    
    ---------------上面的是sumvalue.ts------------------
    
    
    
    //里面用了这个CDN
    
    //<script src="https://cdn.bootcss.com/systemjs/0.20.15/system.js">
    

      

    //interface接口
    
    //TypeScript-初识interface接口的用法
    //interface接口
    
    interface Person{
        name:string;
        age:number;//:必须要传
        sex?:string; // ?: 可以选
        readonly salary:number;// readonly 只读 不能修改
        [propName:string]:any;//any 任意
        greet():void;//无返回值的方法
    }
    
    
    //interface 可以继承 type 不能继承
    
    let person:Person = {
        name:"shaizhu",
        age:28,
        sex:"男",
        salary:6000,
        ids:[1.,5,45,6,42,6,452,1],
        greet(){
            console.log("hello shaozhui");
        }
        
    }
    
    
    function ppringPerse(person:Person){
        console.log(`我的工资是${person.salary}`)
        person.greet();
    }
    
    ppringPerse(person);
    

      

  • 相关阅读:
    python sys.path.append
    python中的map()函数
    python中的map、filter、reduce函数
    上传文件2.0--drp203
    The import org.apache.commons.fileupload cannot be resolved
    让我会好好学习一阵子的东西
    【JSP】--Error错误页设置,声明式异常--188 drp
    【JSP】--重定向,转发--186 drp
    【JSP】--路径问题--如何去掉../,直接写绝对路径
    主备切换,双机热备,负载均衡,nginx
  • 原文地址:https://www.cnblogs.com/shaozhu520/p/11438242.html
Copyright © 2020-2023  润新知