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

TypeScript中如何实例化含declare关键字的类并获取其属性

针对TypeScript声明类的实例化与属性读取方案

一、动态读取类的属性列表

由于.d.ts仅为类型声明文件,编译后不会生成可执行的类实现代码,若对应的实际JS类仅为空构造函数,无法直接从类本身获取属性。可通过两种方式实现:

  • 静态解析.d.ts文件
    编写简单的Node脚本,用正则匹配.d.ts里的类属性声明(比如匹配\s+(\w+):\s+\w+,这类规则),批量提取出所有属性名,生成可供业务代码使用的属性列表数组。
  • 借助TypeScript类型工具推导
    利用keyof操作符提取类型的属性键,再手动维护(或通过脚本生成)属性列表:
    type AnyModelProps = keyof AnyModel;
    // 示例:脚本生成的属性列表
    const anyModelProps: AnyModelProps[] = ['p1', 'pN'] as const;
    

二、实例化带默认属性的对象

原声明类无属性初始化逻辑,new出来的对象为空,可通过以下方式生成带属性的实例:

  • 对象合并初始化
    定义包含默认值的属性对象,与空实例合并:
    const defaultAnyModel: AnyModel = {
      p1: '',
      pN: 0
    };
    const obj = Object.assign(new AnyModel(), defaultAnyModel);
    
  • 直接创建符合类型的对象
    无需调用构造函数,直接创建满足类型定义的对象,TypeScript会认可其为目标类型实例:
    const obj: AnyModel = {
      p1: '',
      pN: 0
    };
    
  • 封装通用实例化工具函数
    结合属性列表,编写通用函数批量初始化属性:
    function createModelInstance<T>(cls: new () => T, defaultValues: Partial<T>): T {
      const instance = new cls();
      Object.assign(instance, defaultValues);
      return instance;
    }
    
    // 使用示例
    const obj = createModelInstance(AnyModel, { p1: '', pN: 0 });
    

内容的提问来源于stack exchange,提问作者A.B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:04:51