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

TypeScript中如何声明类型与指定接口属性类型一致的变量

解决方案

直接用TypeScript内置的**索引访问类型(Indexed Access Types)**就能实现这个需求,不需要手动同步类型。

你的原有IUser接口定义:

export interface IUser {
  id: string;
  displayName: string;
  email?: string;
  imageUrl?: string;
  disabled?: boolean;
  since?: Date;
}

要声明和IUser的id属性同类型的变量,写法如下:

let id: IUser['id']; // 此时id的类型自动关联为string,和IUser.id的类型完全同步

说明

  • 你设想的typeof IUser.id写法不生效的原因是:IUser是TS层面的类型定义,不是JS运行时的实际值,typeof运算符只能作用于实际存在的JS值,不能直接作用在类型上。
  • 用IUser['属性名']的写法可以精准获取接口对应属性的类型,后续你修改IUser里对应属性的类型时,所有用这种方式声明的变量类型会自动同步更新,不需要手动修改。比如后续你把IUser的id类型调整为number:
    export interface IUser {
      id: number; // 类型修改为number
      // 其他属性不变
    }
    
    上面声明的id变量的类型会自动变为number,不需要做任何额外调整。
  • 这个语法对可选属性也完全适配,比如你要获取email的类型,写IUser['email']得到的就是string | undefined,和接口定义的可选属性类型完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:04