zoukankan      html  css  js  c++  java
  • Typescript语法简单汇总

    1、Typescript原始数据类型:

    string

    number

    boolean

    null

    undefined

    enum

    symbol

    空值一般采用void表示,void可以表示变量,也可以表示函数返回值。

    2、Typescript中的任意值:

    任意值(any)用来表示允许赋值为任意类型。

    申明一个变量为任意值后,对它的任何操作,返回的内容的类型都是任意值。

    变量如果在申明的时候如果未指定其类型,那么它会被识别为任意值类型。

    let a; // a是任意类型
    a = 5;
    a = 'a';
    
    console.log(a);

    3、Typescript的类型推论:

    Typescript会依照类型推论的规则推断出一个类型。

    let b = 1; // b是number类型
    b = 2;
    console.log(b);

    如果定义的时候没有赋值,不管之后有没有被赋值,都会被推断出any类型而完全不被类型检查。

    4、Typescript联合类型:

    联合类型表示取值可以为多种类型中的一种。

    只能访问此联合类型内的所有类型里共有的属性和方法。

    const a: string | number = 1;
    console.log(a.length); // 报错:Property 'length' does not exist on type 'number'
    console.log(a.toString());

    5、Typescript中对象类型-接口:

    可描述类的一部分抽象行为,也可描述对象的结构形状。

    接口一般首字母大些,有的编程语言建议接口的名称前加上“I”前缀。

    赋值的时候变量的形状必须跟接口的形状保持一致。

    接口中可定义可选属性,只读属性,任意属性。

    
    interface Istate1 {
        name: string;
        age: number;
    }
    
    const obj1: Istate1 = {
        name: "Tom",
        age: 10
    }
    
    // 可选属性
    interface Istate2 {
        name: string;
        age?: number;
    }
    
    const obj2: Istate2 = {
        name: "张三",
        age: 18
    }
    
    const obj3: Istate2 = {
        name: "李四"
    }
    
    // 属性个数不确定的时候, any必须是任意类型
    interface Istate3 {
        name: string|number;
        age?: number;
        [propName: string]: any;
    }
    
    const obj33: Istate3 = {
        name: 'Jay',
        age: 20,
        sex: "men",
        isMary: false
    }
    // 只读属性
    interface Istate4{
        name: string;
        readonly age: number;
    }
    
    const obj4: Istate4 = {
        name: "Jack",
        age: 55
    }
    
    obj4.age = 56; // Cannot assign to 'age' because it is a read-only property.

    6、Typescript数组类型:

    1) 可采用"类型[]"法表示;

    2) 可采用数组泛型“Array<类型>”表示法;

    3) 可采用接口表示法。

    // “类型[]”表示法
    const arr1: number[] = [1, 2, 3, 4, 5];
    const arr2: string[] = ["1", "2", "3"];
    const arr3: any[] = [1, '2', true];
    // "Array<类型>"表示法
    const arr4: Array<number> = [1, 2, 3];
    const arr5: Array<string> = ["1", "2", "3"];
    const arr6: Array<any> = [1, "2", true];
    // 接口表示法
    interface Istate{
        name: string;
        age: number;
    }
    
    interface Iarr{
        [index: number]: Istate;
    }
    
    const arr7: Iarr = [
        {
            name: 'Bill',
            age: 66
        },
        {
            name: "Pony",
            age: 51
        }
    ];
    
    const arr8: Istate[] = [
        {
            name: 'Bill',
            age: 66
        },
        {
            name: "Pony",
            age: 51
        }
    ];
    
    const arr9: Array<Istate> = [
        {
            name: 'Bill',
            age: 66
        },
        {
            name: "Pony",
            age: 51
        }
    ];

    7、Typescript函数类型:

    函数约束:有函数本身的参数约束,返回值约束;

    还有函数本身赋值的变量的约束;

    可采用重载的方式才支持联合类型的函数关系。

    // 申明式类型的函数
    function funType(name: string, age: number): number{
        return age;
    }
    
    const ageNum: number = funType("Tom", 18);
    
    // 函数参数不确定
    function funType2(name: string, age: number, sex?: string): number{
        return age;
    }
    
    const age2Number = funType2("Tom", 18, "男");
    
    // 函数参数的默认值
    function funType3(name="Tom", age=18): number{
        return age;
    }
    
    const age3Number = funType3();
    console.log(age3Number)
    // 表达式类型的函数
    const funType4 = function(name: string, age: number): number{
        return age;
    }
    
    const funType: (name: string, age: number) => number  = function(name: string, age: number): number{
        return age;
    }
    
    interface IfunType6{
        (name: string, age: number): number;
    }
    
    const funType6: IfunType6 = function(name: string, age: number): number{
        return age;
    }
    // 对于联合类型的函数可以采用重载的方式
    // 输入是number,输出也是number
    // 输入是string,输出也是string
    function getValue(value: number): number;
    function getValue(value: string): string;
    function getValue(value: number|string): number|string{
        return value;
    }
    
    const a: number = getValue(1);
    const b: string =getValue("1");
    

    8、Typescript类型断言:

    类型断言可以用来手动指定一个值的类型。

    语法:<类型>值或者值 as 类型。

    在tsx语法(React的jsx语法的ts版)必须采用后面一种。

    类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的。

    // 类型断言 只能断言联合类型中存在的类型
    function getAssert(name: string|number){
        //return (<string>name).length;
        return (name as string).length;
    }

    9、Typescript类型别名:

    类型别名可以用来给一个类型起一个新名字。

    采用关键字,比如“type name = string | number”。

    例子中name就表示可以设置字符串或者数值类型。

    也可用type来约束取值只能是某些字符串中的一个,如:

    type eventNames = "click" | "scroll" | "mousemove"

    // 类型别名
    //const str: string|number = "1";
    
    type strType = string | number | boolean;
    let str: strType = "1"
    str = 1;
    str = true;
    console.log(str);
    // 对于接口也可以采用类型别名
    interface MuchType1{
        name: string;
    }
    
    interface MuchType2{
        age: number;
    }
    
    type MuchType = MuchType1 | MuchType2;
    
    const obj1: MuchType = {
        name: "Jack"
    }
    
    const obj2: MuchType = {
        age: 20
    }
    
    const obj3: MuchType = {
        name: "Jay",
        age: 22
    }
    
    console.log(obj1);
    console.log(obj2);
    console.log(obj3);
    // 限制字符串的选择
    type sex = "男" | "女";
    
    function getSex(s: sex): string{
        return s;
    }
    
    getSex("男");

    10、Typescript枚举:

    枚举(enum)类型用于取值被限定在一定范围内的场景。

    采用关键字enum定义,比如:enum days{Sun, Mon, Tue, Wed, Thu, Fri, Sat}。

    枚举成员会被赋值为从0开始递增的数字,同时也会被枚举值到枚举名进行反向映射。

    // 使用枚举可以定义一些有名字的数字常量
    enum Days{
        Sun,
        Mon,
        Tue,
        Wed, 
        Thu, 
        Fri, 
        Sat
    }
    
    console.log(Days.Sun); // 0
    console.log(Days.Sat); // 6
    console.log(Days); // {0: "Sun", 1: "Mon", 2: "Tue", 3: "Wed", 4: "Thu", 5: "Fri", 6: "Sat", Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, …}
    console.log(Days[0] === "Sun"); // True

    11、Typescript类的装饰符:

    public、private和protected。

    12、Typescript泛型:

    泛型是指在定义函数、接口或类的时候,不预先指定具体类型,而是在使用的时候再指定类型的一种特性。

    // 函数中使用泛型
    function createArr<T>(length: number, value: T): Array<T>{
        const arr = [];
        for(let i = 0; i<length; i++){
            arr[i] = value;
        }
    
        return arr;
    }
    
    const strArr: string[] = createArr(8,"a");
    console.log(strArr);
    const numArr: number[] = createArr(6, 1);
    console.log(numArr);
    
    // 接口当中使用泛型
    interface Icreate{
        <T>(name: string, value: T): Array<T>;
    }
    
    const func: Icreate = function<T>(name: string, value: T): Array<T>{
        return [];
    }
    
    const strArr2: number[] = func("Jack", 3);

    转载地址:https://www.cnblogs.com/samve/p/12347658.html
  • 相关阅读:
    socket based————转帖
    罗马假日 java程序员
    java六大必须理解的问题来自网络少许有误 java程序员
    spring的scope="prototype" java程序员
    @GeneratedValue java程序员
    myeclipse乱码和tomcat相关的 java程序员
    关于***.hbm.xml的说明 java程序员
    hibernate中的Annotation补充 java程序员
    爱的随笔C语言版 java程序员
    Hibernate对jpa annotation的支持 java程序员
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/14032656.html
Copyright © 2011-2022 走看看