You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除对象属性并转换为TypeScript子集类型(规避ESLint报错)

解决方案:移除额外属性并避免ESLint未使用变量报错

针对你遇到的问题,这里提供几种无需禁用ESLint规则、也不用delete操作的实现方式,按实用性排序:

1. 通用属性选取工具函数(最优解)

写一个可复用的pick函数,只提取目标类型需要的属性,同时保留TypeScript的类型检查:

type Person = {
    name: string;
    age: number;
    address: string;
    id: number;
}

type PersonWithoutId = {
    name: string;
    age: number;
    address: string;
}

const person: Person = {
    name: 'John',
    age: 30,
    address: '123 Main St',
    id: 1
}

// 通用pick函数
function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
    return keys.reduce((result, key) => {
        result[key] = obj[key];
        return result;
    }, {} as Pick<T, K>);
}

// 提取需要的属性
const alex: PersonWithoutId = pick(person, ['name', 'age', 'address']);

这种方式的优势:

  • 完全符合类型安全,属性名写错会直接触发TypeScript报错
  • 函数可复用在任何需要提取属性的场景
  • 不会产生未使用变量,自然避免ESLint报错

2. 直接构造目标对象(适合属性较少的场景)

如果目标类型的属性不多,直接手动构造新对象是最直观的方式:

const alex: PersonWithoutId = {
    name: person.name,
    age: person.age,
    address: person.address
};

优点是简单直接,无需额外工具函数;缺点是属性较多时会产生重复代码,维护成本高。

3. 过滤对象键值对(需类型断言)

利用Object.entries和Object.fromEntries过滤掉多余属性,不过需要配合类型断言:

const alex: PersonWithoutId = Object.fromEntries(
    Object.entries(person).filter(([key]) => key !== 'id')
) as PersonWithoutId;

这种方式无需手动列举属性,但缺点是丢失了部分类型安全——如果属性名拼写错误(比如把id写成Id),TypeScript不会提前报错,只能在运行时发现问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:27