【发布时间】:2023-04-08 20:26:01
【问题描述】:
如果存在updatedBy 属性,我需要一个需要属性updatedAt 的接口或类型(反之亦然);但是,它应该不允许设置任何属性。
interface BaseRow {
id: string
createdAt: string
createdBy: string
}
interface Updated {
updatedAt: string
updatedBy: string
}
interface UpdatedRow extends BaseRow, Updated {}
type Row = BaseRow | UpdatedRow
基于上述情况,我预计以下内容会导致打字稿编译器抛出错误,因为updatedAt 存在但updatedBy 不存在。
const x: Row = {
id: 'someID',
createdAt: 'someISO',
createdBy: 'someID',
updatedAt: 'someISO'
}
以上内容不会引发任何错误。
为什么上述解决方案没有按预期工作?实现有条件地需要两个或更多属性的interface 或type 的最佳方法是什么?
【问题讨论】:
-
在我看来,TS 可能只是认为
x只是一个带有额外updatedAt属性的Row类型,而不是UpdatedRow类型.. -
@aznbanana9 这没有意义,因为如果添加未知属性,编译器仍然会抛出错误,但不会为
updatedAt或updatedBy抛出错误
标签: typescript types interface