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

React+TypeScript类型链式访问优化:去除default层级

解决TypeScript类型链式访问中多余的default层级问题

问题原因

你当前代码里出现types.login.default.form的原因是:login.tsx中使用了export default login导出命名空间,当用import * as _login导入时,模块对象_login会把default作为属性来存放你导出的命名空间,因此必须通过.default访问。

解决方案

方案1:修改login.tsx直接导出命名空间

把login.tsx中的export default改为直接导出命名空间:

// login.tsx
export namespace login {
  export type form = {
    mobile: string;
  }
}

然后修改index.tsx,直接导入命名空间并聚合:

// index.tsx
import { login } from './login';

namespace types {
  export import login = login;
}

export default types;

此时在app.tsx中就可以直接使用types.login.form:

// app.tsx
import types from '../types';

const Form = ({ mobile }: types.login.form) => {
  return <div>{mobile}</div>;
};

方案2:拆分类型导出与聚合

如果不想用命名空间,也可以拆分导出:

// login.tsx
export type LoginForm = {
  mobile: string;
};

然后在index.tsx中重新组织types命名空间:

// index.tsx
import { LoginForm } from './login';

namespace types {
  export namespace login {
    export type form = LoginForm;
  }
}

export default types;

这样同样可以在app.tsx中使用types.login.form。

关键说明

  • TypeScript中,export default导出的内容会被包裹在模块的default属性中,使用import * as导入时必须通过.default访问。
  • 直接导出命名空间或类型,可以避免生成多余的default层级,让链式访问更简洁。

内容的提问来源于stack exchange,提问作者new of man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:36:00