2

可选属性

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

一个示例🌰:

  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.

邢走在云端
303 声望25 粉丝

you async, i await.