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

如何在TypeScript中获取类属性名并作为静态变量使用?

解决方案

首先修正你原Car类中的错误:构造函数里的this.number = number是笔误,应该改为this.year = year,否则会导致类属性不匹配。

针对你的需求,推荐两种简洁且类型安全的方案,既能避免硬编码属性名,又能获得TypeScript的自动提示:

方案一:静态只读属性(手动维护,类型约束)

直接在类中定义与实例属性同名的静态只读属性,赋值为对应的属性名字符串。TypeScript会自动进行类型校验,新增实例属性时,若未同步添加静态属性,后续使用时会触发类型报错,提醒你同步维护。

class Car {
    model: string;
    year: number;
    price: string;

    // 静态只读属性,与实例属性一一对应
    static readonly model = 'model';
    static readonly year = 'year';
    static readonly price = 'price';

    constructor(model: string, year: number, price: string) {
        this.model = model;
        this.year = year; // 修正原笔误
        this.price = price;
    }
}

// 使用示例:校验JSON数据
function validateCarData(data: unknown): boolean {
    if (typeof data !== 'object' || data === null) return false;
    // 直接通过静态属性获取属性名,无需硬编码
    return (
        Car.model in data &&
        Car.year in data &&
        Car.price in data
    );
}

方案二:自动挂载静态属性(减少手动重复)

通过TypeScript的类型工具和辅助逻辑,自动给类挂载静态属性,只需维护一个属性名数组(有类型约束),新增属性时数组会触发类型校验,确保同步。

class Car {
    model: string;
    year: number;
    price: string;

    constructor(model: string, year: number, price: string) {
        this.model = model;
        this.year = year; // 修正原笔误
        this.price = price;
    }
}

// 定义Car类的实例属性键类型
type CarPropertyKeys = keyof Car;
// 维护属性名数组,TypeScript会校验数组元素是否都是Car的合法属性
const carPropertyKeys = ['model', 'year', 'price'] as const satisfies readonly CarPropertyKeys[];

// 自动给Car类挂载静态属性
carPropertyKeys.forEach(key => {
    (Car as Record<string, string>)[key] = key;
});

// 使用示例:校验JSON数据
function validateCarData(data: unknown): boolean {
    if (typeof data !== 'object' || data === null) return false;
    return carPropertyKeys.every(key => key in data);
}

两种方案都能满足你的需求:

  • 避免硬编码属性名字符串
  • 获得TypeScript的自动补全提示
  • 新增属性时能通过类型校验确保同步维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:57:44