TypeScript在可选排列属性上给出错误

TypeScript在可选排列属性上给出错误,typescript,Typescript,我得到了以下代码: type MakeStyleConfig = { updateConfig?: { prevProps: Record<string, unknown> styledProps: string[] } [K: string]: unknown } type MakeStyles = (config?: MakeStyleConfig) => void const makeStyles : MakeStyles = (config

我得到了以下代码:

type MakeStyleConfig = {
  updateConfig?: {
    prevProps: Record<string, unknown>
    styledProps: string[]
  }
  [K: string]: unknown
}
type MakeStyles = (config?: MakeStyleConfig) => void

const makeStyles : MakeStyles = (config) => console.log(config)

let updateConfig: MakeStyleConfig | undefined
if (3/4 > -2) {
  updateConfig = {
    prevProps: {a:3},
    styledProps: ['size', 'shape']
  }
}
const state = {loaded: false}

// Why is this not working?
makeStyles({updateConfig: updateConfig, ...state})
//          ^^^^^^^^^^^^ this is marked as error by TSC

// This works OK as I expected:
makeStyles({updateConfig: {prevProps:{a:3}, styledProps:["s"], ...state}})
type MakeStyleConfig={
更新图?:{
道具:记录
styledProps:string[]
}
[K:字符串]:未知
}
键入MakeStyles=(配置?:MakeStyleConfig)=>void
const makeStyles:makeStyles=(配置)=>console.log(配置)
让updateConfig:MakeStyleConfig |未定义
如果(3/4>-2){
updateConfig={
prevProps:{a:3},
styledProps:['size','shape']
}
}
常量状态={loaded:false}
//为什么这不起作用?
makeStyles({updateConfig:updateConfig,…state})
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TSC将此标记为错误
//这工作正常,正如我所预期的:
makeStyles({updateConfig:{prevProps:{a:3},StyledOps:[“s”],…state})
为什么TypeScript(v4.2.3)将代码标记为错误?它具有正确的类型和字段。这个错误也很神秘:

Type 'MakeStyleConfig | undefined' is not assignable to type '{ prevProps: Record<string, unknown>; styledProps: string[]; } | undefined'.
  Type 'MakeStyleConfig' is missing the following properties from type '{ prevProps: Record<string, unknown>; styledProps: string[]; }': prevProps, styledProps
Type'MakeStyleConfig | undefined'不可分配给类型{prevProps:Record;styledProps:string[];}| undefined'。
类型“MakeStyleConfig”缺少类型“{prevProps:Record;StyledOps:string[];}”中的以下属性:prevProps,StyledOps

以下是您试图将
updateConfig
类型的
MakeStyleConfig
设置为
MakeStyleConfig.updateConfig
类型的TS游乐场

{
prevProps:记录,
styledProps:string[]
}
这两种类型显然不相同

您可能应该定义一个类型,可以在
MakeStyleConfig
对象的
updateConfig
字段中重用该类型,并进行更改

let updateConfig:MakeStyleConfig |未定义
成为那种新的类型

例如:

type UpdateConfig={prevProps:Record;styledProps:string[];}
类型MakeStyleConfig={
updateConfig?:updateConfig |未定义
[K:字符串]:未知
}
// ...
让updateConfig:updateConfig |未定义;
// ...
makeStyles({updateConfig,…state})//现在应该可以工作了

我的问题是为什么它被标记为错误。强制转换不是一个好的解决方案,它可能会掩盖一个潜在的问题。@sydd我已经修改了我的答案,因为我最初误读了你的问题。你是对的,我混淆了对象嵌套。谢谢你的帮助!