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

求助:TypeScript通过custom.d.ts增强TypographyProps变体失效

问题原因分析及修复方案

核心问题1:Merge类型逻辑错误

你当前的Merge类型返回的是对象类型,但TypographyProps['variant']需要的是字符串联合类型。看你的代码:

// 错误的类型推导逻辑
type Merge<X, Y> = {
  [K in keyof X | keyof Y]:
    | (K extends keyof X ? X[K] : never)
    | (K extends keyof Y ? Y[K] : never)
}

// TypographyProps里的variant实际类型是 { variant: 'variant-1'|... | 'variant-4'|... }
// 而非期望的 'variant-1'|'variant-2'|'variant-3'|'variant-4'|... 联合类型
export interface TypographyProps {
  variant: Merge<DefaultVariant, VariantOverrides>
}

这直接导致组件接收的variant参数类型完全不符合预期,类型增强自然无法生效。

核心问题2:模块增强的冗余写法

在web-1和web-2的类型增强代码里,import 'ui-library'是多余的,会干扰TypeScript的模块合并逻辑。正确的模块增强不需要在declare module块内重复导入目标模块。

修复步骤

步骤1:修正ui-library的类型定义

重新设计类型逻辑,让variant的类型是默认值与扩展值的字符串联合类型:

export interface DefaultVariant {
  variant: 'variant-1' | 'variant-3' | 'variant-2'
}

// 保留空接口用于外部扩展
export interface VariantOverrides {}

// 提取默认variant类型 + 扩展的variant类型
type VariantType = 
  DefaultVariant['variant'] 
  | (VariantOverrides extends { variant: infer V } ? V : never);

export interface TypographyProps {
  // 直接使用联合类型
  variant: VariantType
}

export const Typography = ({ variant }: TypographyProps) => {
  return <div>{variant}</div>
}

步骤2:修正web-1/web-2的类型增强代码

去掉冗余的import语句,直接扩展VariantOverrides:

// web-1/src/typings/ui-library.d.ts
declare module 'ui-library' {
  export interface VariantOverrides {
    variant: 'variant-4' | 'variant-5'
  }
}
// web-2/src/typings/ui-library.d.ts
declare module 'ui-library' {
  export interface VariantOverrides {
    variant: 'variant-55' | 'variant-46'
  }
}

步骤3:确保monorepo类型引用正确

确保web-1和web-2的tsconfig.json中正确配置了对ui-library的引用,比如通过compilerOptions.paths或者monorepo workspace的自动映射,让TypeScript能识别到ui-library的类型定义和增强代码。

验证效果

修复后,在web-1中使用Typography组件时,variant的可选值会包含'variant-1'|'variant-2'|'variant-3'|'variant-4'|'variant-5';web-2中则会包含'variant-1'|'variant-2'|'variant-3'|'variant-55'|'variant-46',实现了预期的类型增强效果。

内容的提问来源于stack exchange,提问作者Jakub Kontra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:50:34