You need to enable JavaScript to run this app. TypeScript解构{state,...params}时如何定义类型以访问params属性
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript解构{state,...params}时如何定义类型以访问params属性

错误根因

你自定义的newONe接口仅声明了state字段,没有定义其他额外字段,所以TypeScript会推断解构出的剩余参数params是空对象类型,自然无法访问c属性。同时你原定义中state的联合类型objectType | objectType3也不符合实际传入的参数类型,可以简化修正。


解决方案(按推荐优先级排序)

方案1:明确声明剩余字段(类型安全最高)

你传入函数的参数已经把objectType3的c、d字段展开到和state同级,直接让newONe接口继承objectType3即可:

const state:objectType ={
    a :'a',
    b : 'b'
}

type objectType = {[key : string] : string}
type objectType3 = {c: number,d : number}

const params:objectType3= {
    c:1,
    d:2
}

// 接口继承objectType3,自动包含c、d字段
interface newONe extends objectType3 {
    state : objectType;
}

function g({state,...params} : newONe){
    console.log(state);
    console.log(params.c) // 正常访问,params类型自动推导为objectType3
}

g({state,...params});

方案2:使用泛型适配不同剩余参数类型

如果剩余参数的类型不固定,可以用泛型提升复用性:

type objectType = {[key : string] : string}

// 泛型T代表剩余参数的类型
interface newONe<T extends Record<string, any>> {
    state: objectType;
} & T

// 使用时传入剩余参数的类型即可
function g<T extends Record<string, any>>({state,...params} : newONe<T>){
    console.log(state);
    console.log(params.c)
}

方案3:添加索引签名(适配任意剩余字段,类型安全较低)

如果剩余参数的字段完全不确定,可以添加索引签名兜底:

interface newONe {
    state: objectType;
    // 允许任意字符串类型的键
    [key: string]: any;
}

内容的提问来源于stack exchange,提问作者Farro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:15:03