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

TypeScript:数组联合类型调用includes方法为何无法正常工作?

联合类型元组调用includes报错的原因

你定义的Test类型是三个对象类型的联合:

type Test = {
  roles: ["nonProfit"];
  nonProfitPrivateDetails: NonProfitPrivateDetails;
} | {
  roles: ["artist"];
  artistPrivateDetails: ArtistPrivateDetails;
} | {
  roles: ["artist", "nonProfit"];
  nonProfitPrivateDetails: NonProfitPrivateDetails;
  artistPrivateDetails: ArtistPrivateDetails;
}

当你调用t.roles.includes("artist")时,出现Argument of type 'string' is not assignable to parameter of type 'never'的报错,核心原因是TypeScript对联合类型的方法解析逻辑:

  • 对于联合类型的属性方法,TypeScript会取所有分支对应方法的参数类型交集作为最终的参数类型。
  • 你的三个分支中,roles的includes参数类型分别是:
    1. 第一个分支:仅接受"nonProfit"(因为元组["nonProfit"]的元素类型是"nonProfit")
    2. 第二个分支:仅接受"artist"(元组["artist"]的元素类型是"artist")
    3. 第三个分支:接受"artist" | "nonProfit"(元组["artist", "nonProfit"]的元素类型是两者的联合)

这三个参数类型的交集是"nonProfit" & "artist" & ("artist" | "nonProfit")——而"nonProfit"和"artist"是互斥的字符串字面量,没有任何值能同时属于这两个类型,所以交集结果是never。这就导致你传入的"artist"不被允许,因为它不符合never类型的要求。

简单总结:联合类型的方法必须能适配所有分支的调用要求,而你的场景里三个分支的includes参数要求无法统一,最终参数类型被收缩为never,触发编译报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:09:25