首页 > 解决方案 > 对于一个接口,这两种方式有什么区别?

问题描述

为什么这两篇著作有不同的结果?

PS:没有任何 tsconfig 设置。

interface LabelledValue {
  label: string;
}
interface LabelledValue1 {
  size: number;
  label: string;
}

function printLabel(labelledObj: LabelledValue) {
  console.log(labelledObj.label);
}

printLabel({ size: 10, label: "Size 10 Object" });

let myObj: LabelledValue1 = { size: 10, label: "Size 10 Object" };
printLabel(myObj);

在 上parintLabel({}),我们得到一个 TypeError:

'{ size: number; 类型的参数 标签:字符串;}' 不可分配给“LabelledValue”类型的参数。

对象字面量只能指定已知属性,并且在类型“LabelledValue”中不存在“大小”.ts(2345)

标签: typescript

解决方案


这是因为在您的第一个 printlabel 中,您的对象是“any”类型,因此编译器不会检查类型是否正确。

官方文档:https ://www.typescriptlang.org/docs/handbook/basic-types.html#any

如果您使用该接口,编译器能够检查对象是否与定义匹配。


推荐阅读