核心结论
多态组件通过 as 切换实际渲染目标时,必须让元素类型参数同时决定可用原生属性、事件类型和引用类型。正确模型不是把所有元素属性组成巨大联合,而是以当前渲染目标为单一类型来源:先声明组件自定义属性,再从目标元素或组件的属性中排除自定义键及 as,最后组合剩余属性。默认元素的泛型默认值必须与运行时默认渲染目标一致,否则省略 as 时会出现类型许可与实际输出不匹配。
底层机制
在 React 中,渲染目标通常由类似 ElementType 的抽象约束。根据具体目标取得对应组件属性后,应收集所有自定义属性键以及 as 键,使用 Omit 从原生属性中删除这些冲突项,再与自定义属性交