首页 > 解决方案 > 直接传入对象和在 TS 函数中作为引用之间的区别

问题描述

我目前正在学习 TypeScript,但我不完全确定接口何时是固定合同以及何时仅定义最低要求。这是一个例子:

interface Animal {
  name: string;
}

const func = (arg: Animal) => {};

const obj = {
  name: "tom",
  bark: () => undefined,
}

func(obj); // -> OK
func({
  name: "tom",
  bark: () => undefined, // -> NOT OK
})
func({...obj}) // -> OK

如您所见,将变量传递给 ( func(obj)) 只是定义了对象接口的最低要求。在这种情况下,对象需要有一个名称属性,但可以附加其他属性。

但是,如果我将对象字面量创建为函数调用 ( func({...})) 的一部分,则该关系更像是一个固定合同,其中对象需要具有与Animal. 在这种情况下,我不能传递具有任何附加属性的对象。

关于接口何时是固定合同与最低要求是否有任何规则?

标签: typescript

解决方案


推荐阅读