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我已经修改了我的答案,因为我最初误读了你的问题。你是对的,我混淆了对象嵌套。谢谢你的帮助!