无法将空对象设置为 Record 类型的参数的默认值

Posted

技术标签:

【中文标题】无法将空对象设置为 Record 类型的参数的默认值【英文标题】:Can't set empty object as default value for param with type Record 【发布时间】:2021-05-10 13:19:12 【问题描述】:
type SimpleObject = Record<string, any>
<T extends SimpleObject>(param: T = ) => param
                         ^^^^^^^^^^^^^ 

TS2322:类型“”不可分配给类型“T”。 “”可分配给“T”类型的约束,但“T”可以用约束“Record”的不同子类型来实例化。

【问题讨论】:

【参考方案1】:

TypeScript 不知道T 的形状,它可能匹配也可能不匹配,所以你需要明确告诉你知道T,如下所述:

TS Playground link

type SimpleObject = Record<string, any>
<T extends SimpleObject>(param: T =  as T) => param

【讨论】:

以上是关于无法将空对象设置为 Record 类型的参数的默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何将空值设置为结构的默认值

将空值设置为列表中最接近的最后一个非空值 - LINQ

将空值设置为缺失表字段的默认值

将空数组作为可选参数的默认值传递[重复]

将空元组分配给专用变量时的类型不兼容

如何将空值显式插入参数化查询?