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

如何从接口列表创建泛型?确保函数参数符合指定接口类型

TypeScript泛型约束联合类型参数的实现方法

你已经定义了接口A、B以及它们的联合类型AllTypes:

interface A {
    // ...
}

interface B {
    // ...
}

type AllTypes = A | B;

要通过泛型确保函数参数是符合A或B的对象,直接给泛型添加extends AllTypes约束即可,这对应你伪代码里的T oneof AllTypes需求:

function test<T extends AllTypes>(argument: T): void {
    // 函数逻辑
}

说明:

  • T extends AllTypes 表示泛型T必须是AllTypes的子类型,而AllTypes是A和B的联合,所以T只能是A、B,或是它们的扩展子类型(带有额外兼容属性的对象)。
  • 调用函数时,传入符合A或B的对象会通过编译,不符合的则会触发编译错误:
    // 合法:符合A类型
    test({ propA: "示例文本" });
    // 合法:符合B类型
    test({ propB: 123 });
    // 编译错误:不属于AllTypes的范围
    test({ propC: true });
    

如果需要严格限制T只能是A或B本身,不允许它们的扩展子类型,可以结合条件类型进一步约束:

function test<T extends AllTypes>(argument: T extends A | B ? T : never): void {
    // 函数逻辑
}

这种写法会排除掉带有额外属性的A/B子类型,仅接受完全匹配A或B结构的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:54:24