首页 > 解决方案 > 为什么打字稿中的接口有时需要严格匹配属性,有时不需要

问题描述

interface LabeledValue {
  label: string;
}

function printLabel(labeledObj: LabeledValue) {
  console.log(labeledObj.label);
}

let myObj = { size: 10, label: "Size 10 Object" }; // not err  

let myObj1: LabeledValue = { size: 10, label: "Size 10 Object" }; // err 

printLabel(myObj);

myObj 和 myObj1 都需要实现 LabeledValue 接口。为什么 myObj1 有错误?

标签: typescript

解决方案


第一种情况不会发生错误,因为没有指定期望的类型,第二种情况key在对象和类型中不匹配,所以会发生错误

interface LabeledValue {
  label: string;
  size: number;  // <----------- insert 
  // or size?: number; if you want sometimes skip it
}

function printLabel(labeledObj: LabeledValue) {
  console.log(labeledObj.label);
}

let myObj = { size: 10, label: "Size 10 Object" }; // not err  

let myObj1: LabeledValue = { size: 10, label: "Size 10 Object" }; // not err 

printLabel(myObj);

阅读更多https://www.typescriptlang.org/docs/handbook/functions.html#optional-and-default-parameters


推荐阅读