美文网首页TypeScript
TypeScript学习 接口interface(二)可选属性

TypeScript学习 接口interface(二)可选属性

作者: 邢走在云端 | 来源:发表于2019-10-23 09:26 被阅读0次

    可选属性

    接口里的属性不全是必须的,有些可以不用

    一个示例🌰:

    1. 首先创建一个带有可选属性的接口
    // 创建一个人的接口, 姓名,年龄必须,但是签名是可选的
    interface Person {
      name: string,
      age: number,
      signature?: string // 属性后加?表示可选
    }
    
    1. 然后定义打印此人签名的函数
    // 打印签名的函数 因为是
    function printSignature(person: Person): void {
      let signature ;
      if (person.signature) {
        signature = person.signature;
      } else {
        signature = "这个家伙很懒,什么也没留下";
      }
      console.log(signature)
    }
    

    因为是可选属性,所以当有signature属性时就打印,没有就答应函数内部默认的一句话--“这个家伙很懒,什么也没留下”

    1. 定义两个符合要求的参数一个有这个属性,一个没
    let person1 = {
      name: "邢走在云端",
      age: 21,
      signature: "you async, I await"
    }
    
    let person2 = {
      name: "张三",
      age: 22
    }
    
    1. 调用函数
    printSignature(person1); // you async, I await
    printSignature(person2); // 这个家伙很懒,什么也没留下
    
    1. 查看结果

      上述两个参数都是符合要求的,所以打印出需要的语句(上述注释处)

    完整代码🌰

    // 创建一个人的接口, 姓名,年龄必须,但是签名是可选的
    interface Person {
      name: string,
      age: number,
      signature?: string
    }
    
    // 打印签名的函数
    function printSignature(person: Person): void {
      let signature ;
      if (person.signature) {
        signature = person.signature;
      } else {
        signature = "这个家伙很懒,什么也没留下";
      }
      console.log(signature)
    }
    
    // 定义两个参数,一个有signature,一个没有signature,都不会报错,因为
    let person1 = {
      name: "邢走在云端",
      age: 21,
      signature: "you async, I await"
    }
    
    let person2 = {
      name: "张三",
      age: 22
    }
    
    printSignature(person1);
    printSignature(person2);
    

    只读属性

    只能在第一次赋值,后面不能再进行修改

    很容易理解,直接上代码🌰

    // 创建一个人的接口, 姓名,年龄必须,但是签名是可选的
    interface Person {
      name: string,
      age: number,
      readonly signature: string
    }
    
    // 打印签名的函数
    function printSignature(person: Person): void {
      // person.signature = "我想改你"; // Cannot assign to 'signature' because it is a read-only property.
      console.log(person.signature)
    }
    
    // 定义两个参数,一个有signature,一个没有signature,都不会报错,因为
    let person = {
      name: "邢走在云端",
      age: 21,
      signature: "you async, I await"
    }
    
    
    printSignature(person);
    

    上面函数内改变只读属性就会报错💥

    person.signature = "我想改你"; // Cannot assign to 'signature' because it is a read-only property.
    

    相关文章

      网友评论

        本文标题:TypeScript学习 接口interface(二)可选属性

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