美文网首页
typescript基本语法、接口学习笔记

typescript基本语法、接口学习笔记

作者: VickyFan | 来源:发表于2018-10-28 22:31 被阅读0次

    1.基本语法

    javascript提供了基本的数值、字符串、布尔等结构。typescript也提供了额外的枚举类型

    let isDone: boolean = true//布尔类型
    let money: number = 123//数值类型
    let name1: string ='bob'//字符串类型
    let age: number = 22
    let introduce: string = '我的名字是' + name1 +',今年' +age+'岁'   
    let introduce1: string = `我的名字是${name1},今年${age}岁`//模版字符串表达式
    console.log(isDone,money,name1,introduce,introduce1)
    

    枚举:

    let arr: number[] = [1,2,3,4]
    let arr1: Array<number> = [1,2,3,4,5]
    console.log(arr,arr1)
    let yz:[number,string]
    yz = [10,'aaaa']
    console.log(yz)
    enum Name {bob,vicky,alice}
    let c: Name = Name.bob
    console.log(Name,c)//{0:"bob",1:"vicky",2:"alice"}当然默认是从0开始,你可以让bob=1从1开始
    //反之我们可以通过枚举的值得到他的名字
    let myname: String = Name[1]
    console.log(myname)
    
    let price: any = 13445
    price.toFixed(2)
    console.log(price)
    // let prettySure: Object = 4;
    //prettySure.toFixed();//类型“Object”上不存在属性“toFixed”
    
    let someValue: any = "this is a string";
    let strLength: number = (<string>someValue).length;
    let strLength1: number = (someValue as string).length;
    console.log(strLength,strLength1)
    

    2.typescript与javascript声明方式的区别

    typescript支持与javascript几乎相同的数据类型,此外还提供了其他额外的

    2.1区别1:声明方式的不同

    js: var money = 111;
    ts: let money: number = 111

    2.2区别2:元祖表示一个已知元素数量和类型的数组,各元素的类型不必相同

    let yz:[number,string]
    yz = ['10','aaaa']

    2.3区别3:枚举类型:为一组数组赋予友好的名字,枚举的值默认从0开始,当然我们也可以直接赋值,可通过枚举值获取他的名字

    enum Name {bob,vicky,alice}
    let c: Name = Name.bob
    console.log(Name,c)
    let myname: String = Name[1]
    console.log(myname)

    2.4区别4:位置类型

    js:let a;a为undefined
    ts:let notSure: any = 4;
    any和object都可以进行任何的赋值,但是不能调用object上面的任意方法
    let price: any = 13445
    price.toFixed(2)
    console.log(price)
    let prettySure: Object = 4;
    prettySure.toFixed();//类型“Object”上不存在属性“toFixed”

    2.5区别5:断言:类似于js中的typeOf,但是它只在编译时起作用

    1.尖括号语法(<string>.xx)
    2.as语法
    let someValue: any = "this is a string";
    let strLength: number = (<string>someValue).length;
    let strLength1: number = (someValue as string).length;
    console.log(strLength,strLength1)

    3.接口

    3.1基础用法

    接口:可以描述js中对象拥有的外形,例普通对象、函数等。就是类型命名和你的代码进行一个定义契约,比如说传入的某个值要为什么类型

    //下列就是传入一个infoObj对象,并且接口nameInterface说name要为string
    function myName (nameInterface: {name: string}) {
         console.log('My name is ' +nameInterface.name)
     }
     let infoObj = { name :'vicky'}
     myName(infoObj)
    //或者写成
    interface nameInterface {
         name: string
     }
    function myName (nameValu: nameInterface) {
         console.log(nameValu.name)
    }
    let obj = { name: 'alice', age: 18}
    myName(obj)
    
    3.2.可选属性

    下面这种情况,我在接口里定义了两个值,但是传入的对象里面没有,所以就会提示说缺少属性“age",那么有时候我们不想或者不传全部属性的时候,怎么避免这种情况呢?就是可选属性可选属性其实与基本用法差不多,就是在属性名字后面加一个?符号

    interface nameInterface {
         name: string
        age: number
    }
    function myName (nameValu: nameInterface) {
         console.log(nameValu.name)
    }
     let obj = { name: 'alice'}
     myName(obj)
     interface nameInterface {
         name?: string
        age?: number
    }
     function myName (nameValu: nameInterface) {
        console.log(nameValu.name)
     }
     let obj = { name: 'alice'}
     myName(obj)
    
    3.3.只读属性,属性名前加readonly
     interface point {
        readonly x: number,
        readonly y: number
     }
     let p:point = {x: 5, y: 10}
    p.x = 1//[ts]无法分配到“x",因为它是常熟或只读属性
     console.log(p.x)
    
    3.4.readonly与const两者都是不能改变其值了,但是我们怎么能分辨用哪个呢?

    作为变量时我们使用const,作为属性时我们用readonly

    3.5.可索引的类型
    interface StringArray {
        [index: number]: string;
    }
    let myArray: StringArray; 
    myArray= ["Bob", "Fred"]
    let myStr: string = myArray[0];
    console.log(myStr)
    

    相关文章

      网友评论

          本文标题:typescript基本语法、接口学习笔记

          本文链接:https://www.haomeiwen.com/subject/ttimtqtx.html