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

如何用TypeScript优雅转换对象:将数字字符串属性转为数字类型

优雅转换对象到TypeScript类实例的几种方式

绝对有不少清爽又优雅的方案来处理这个转换需求,我给你列几个常用且易维护的做法:

1. 给类添加静态工厂方法(最推荐)

把转换逻辑直接封装在params类内部,让代码更内聚,后续复用也方便:

class params {
  number1: number;
  number2: number;
  string1: string;

  // 静态方法专门处理原始对象到类实例的转换
  static from(raw: { number1: string; number2: string; string1: string }): params {
    const instance = new params();
    // 字符串转数字,这里可以按需加NaN校验(比如抛错或设默认值)
    instance.number1 = parseInt(raw.number1, 10);
    instance.number2 = parseInt(raw.number2, 10);
    instance.string1 = raw.string1;
    return instance;
  }
}

// 使用示例
const x = { number1: '1', number2: '2', string1: 'one' };
const myParams = params.from(x);

如果觉得parseInt不够灵活,也可以用Number(raw.number1),记得根据实际场景处理非数字字符串的情况就行。

2. 独立转换函数(不修改原类时用)

如果不想改动params类的结构,写一个纯函数来处理转换也很干净:

class params {
  number1: number;
  number2: number;
  string1: string;
}

function convertToParams(raw: typeof x): params {
  return {
    number1: Number(raw.number1),
    number2: Number(raw.number2),
    string1: raw.string1
  } as params;
}

// 使用示例
const myParams = convertToParams(x);

这里用as params做类型断言,因为我们明确知道转换后的结构完全符合类的类型定义(TypeScript里类本身也是一种类型)。

3. 通用转换工具(适合多场景复用)

如果项目里有很多类似的字符串转数字的转换需求,可以写一个更通用的工具函数,结合映射类型来扩展:

type RawParams = typeof x;

// 定义和params类对齐的目标类型
type TypedParams = {
  [K in keyof RawParams]: K extends 'number1' | 'number2' ? number : RawParams[K]
};

// 通用转换函数
function convertRawParams(raw: RawParams): TypedParams {
  return {
    ...raw,
    number1: Number(raw.number1),
    number2: Number(raw.number2)
  };
}

// 转换成类实例(如果需要的话)
const myParams = Object.assign(new params(), convertRawParams(x));

这种方式扩展性更强,后续新增字段时,只需要调整类型定义和转换逻辑即可。

小提醒

不管用哪种方式,都建议加个简单的校验,比如检查转换后的数字是否为NaN,避免后续逻辑出问题:

if (isNaN(instance.number1)) {
  throw new Error(`无效的number1值: ${raw.number1}`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:45:18