typescript - 直接传入对象和在 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
. 在这种情况下,我不能传递具有任何附加属性的对象。
关于接口何时是固定合同与最低要求是否有任何规则?
解决方案
推荐阅读
- reactjs - 如何摆脱嵌套在 BrowserRouter 中的 MemoryRouter?
- python - 标准化 numpy 信号(3 维数组),按轴 = 2,在 -1 到 1 之间
- r - 为什么 R 会在我的列名中添加前缀?
- r - R 中对大数据集有哪些有用的优化?
- javascript - 当我用函数覆盖 .ajax 时,为什么不能将 post 变量扔到 PHP 中?
- java - 从 C# 到 Android 的 RSA 公钥传输
- node.js - 我无法在 Node.js 命令中指向我的方向
- python - Jupyter 无法识别 numpy(使用自制 pyenv)
- azure - 如何使用 azure api 运行日志分析查询?
- python - 在 django 迁移中使用特定日期预填充 DateTimeField