ts的基本数据类型


ts的基本数据类型
    1.布尔  boolean    true/false
        let isDone:boolean = false

    2.数字   ts里数字都是浮点数    number    十进制 十六进制 二进制 八进制

    3.字符串  
       形式1:引号   '  ""   和js一样                      let name:string='bb'+myName
       形式2:模板字符串(多行文本和内嵌表达式)  `  ${}     let name:string= `我的名字是${myName}`  
       
    4.数组
        形式1:在元素类型后面接上[],表示由此类型元素组成的一个数组:let list:number[] = [1,2,3]
        形式2:使用数组泛型,Array<元素类型>                     let list:Array<number> = [1,2,3]
        
        定义时的元素类型和赋值时要一致,否则会报错

    5.元组 Tuple
        元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同   可以定义一对值分别为string\number类型的元组
        注意:1)定义时的类型顺序和赋值时应一致,不然会报错
              2)当访问一个已知索引的元素,会得到正确的类型
              3)当访问一个越界的元素,会使用联合类型替代
                注意:在 Typescript 2.7 Tuple 的定义已经变成了有限制长度的数组  不能再越界访问了 官方文档没更新
                     push可以成功,访问数组也能看到这个元素,但是通过索引取不了
                     索引不能获取是静态检查不让你获取而已,实际上运行时还是能的。静态检查对运行时不会有任何影响。
                     typescript的静态类型并不属于强类型,就算声明约束为长度2的数组,它仍然可以push,因为它始终还是js。
                     所以typescript能做的就是在你尽管对数组的操作超越了约束,它还是限制你继续在约束范围外进行其他操作。
                     
        let x: [string, number]
        x = ['hi', 10]    //(2) ["hi", 10]
        x = [10, 'jjj']   //error TS2322: Type 'number' is not assignable to type 'string'.
        
        console.log('----', x[0].substr(1)) //i     substr(start,length)  如果第二个参数没传,默认到最后
        console.log(x[1].substr(1)) //类型“number”上不存在属性“substr”

    6.枚举   enum类型是js标准数据类型的一个补充
            1)使用枚举类型可以为一组数值赋予友好的名字
            2)默认情况下,从0开始为元素编号,也可以手动指定成员的数值
                  enum Color { Red = 1, Green = 2,  Blue = 3,}
            3)可以由枚举的值得到它的名字  这里限定数据类型是你前面定义的那个
                 let c: Color = Color.Green //结果是值
            4)知道值 可以以查到映射对应的名字 这里要限定数据类型是string,等号右边的值是字符串
                let e: Color = Color[3] //不能将类型“string”分配给类型“Color”。
                let d: string = Color[3]//Blue
           
                enum Color { Red = 1, Green = 2,  Blue = 3,}
                let c: Color = Color.Green
                console.log(c) //2

                // let e: Color = Color[3] //不能将类型“string”分配给类型“Color”。
                let d: string = Color[3]
                console.log(d) //blue
    7.Any
        为在编程阶段还不清楚类型的变量指定一个类型(值可能来自于动态的内容  第三方代码库、用户输入)
        不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查=》用any类型标记该变量
        1)不知道变量是什么数据类型
                let notSure: any = 4
                console.log(notSure) //4
                notSure = 'hhhhhhhhh'
                console.log(notSure) //hhhhhhhhh
                notSure = false
                console.log(notSure) //false
        2)改写现有代码
            允许在编译时可选择的包含或移除类型检查         object类型的变量只允许给它赋任意值 但不能在它上面调用任意的方法 即使它真的有这些方法
            let notSure: any = 4
            notSure.ifItExisits()     //浏览器报错了,vscode没有    jc1.js:179 Uncaught TypeError: notSure.ifItExisits is not a function
            notSure.toFixed() //没报错

            let prettySure: Object = 4
            prettySure.toFixed() //vscode直接报错   类型“Object”上不存在属性“toFixed”

        3)只知道部分数据的类型时  比如数值包含不同类型的数据

            let list: any[] = [1, true, 'free']
            list[1] = 100  //vs没报错  没指定数值元素的数据类型

    8.Void
        void类型与any类型相反,表示 没有任何类型
       1) 当一个函数没有返回值时,其返回值类型是void
        function warnUser(): void {
            console.log('message')
        }

        2)声明一个void类型的变量没有大用,只能赋值为undefined null
        let unusable: void = undefined
        let unusable0: void = null
        let unusable1: void = 1 //不能将类型“number”分配给类型“void”。
        let unusable2: void = [1, 2] //不能将类型“number[]”分配给类型“void”。

    9.null\undefined 
        1.默认情况下null和undefined是所有类型的子类型,就是说 你可以把null undefined赋值给number类的变量
        2.如果指定了 --strictNullChecks标记,null\undefined只能赋值给void和它们各自

        如果想传一个string null 或undefined,可以使用【联合类型】string|null|undefined
    
        let u:undefined = undefined;
        let:null = null;

    10.Never
        1)表示永不存在的值的类型             
            --never类型是那些总是会抛出异常或者根本就不会有返回值的函数表达式或箭头函数表达式的返回值的类型
            --变量也可能是never类型,当它们被永不为真的类型保护所约束时
        2)never类型是任何类型的子类型,也可以赋值给任何类型
           但是,只有never可以赋值给never          没有类型是never的子类型或可以赋值给never类型(除了never本身之外),any也不可以赋值给never

            // 返回never的函数必须存在无法达到的终点
            function error(message: string): never {
                  throw new Error(message)
            }

            // 推断的返回值类型为never
            function fail() {
                 return error('Something failed')
            }

            // 返回never的函数必须存在无法达到的终点  死循环
            function infiniteLoop(): never {
                 while (true) {}
            }

    11.object
            表示非原始类型,  除number string boolean  symbol null  undefined之外的类型
            使用object类型可以更好的表示像Object.create这样的API
                declare function create(o: object | null): void
                create({ prop: 0 })
                create(null)
                // create(3) //类型“number”的参数不能赋给类型“object”的参数。
                // create('string') // Error
                // create(false) // Error

                //和文档例子不同
                create(undefined) // 默认情况下null和undefined是所有类型的子类型

    类型断言   
            -只在编译阶段起作用 ts会假设你已经进行了必须的检查
            形式1:尖括号语法
                let someValue:any = "hihi";
                let strLength:number = (<string>someValue).length
            形式2: as语法   在ts里使用JSX时,只允许as语法断言
                let someValue:any = 'hhhhh';
                let strLength:number = (someValue as string).length;

    关于let
            用let代替var             


     


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM