【问题标题】:For an interface, what is the difference between these two way?对于一个接口,这两种方式有什么区别?
【发布时间】:2019-12-20 22:09:08
【问题描述】:

为什么这两篇文章有不同的结果?

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) 类型中不存在'size'

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

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

    如果使用接口,编译器可以检查对象是否与定义匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2019-03-31
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多