Array.includes ts类型问题

Array.includes 方法该怎么使用呢?
如下图,如果确定 key 是属于具体的一个类型,那调用 inclues 还有什么意义。。。

image.png

复现 code 如下:

type TFailSqlType = "exception" | "api" | "resource"
const FAIL_LIST: TFailSqlType[] = ['exception', 'api', 'resource'];

FAIL_LIST.includes('2')
阅读 5.7k
1 个回答
  1. TS 是编译时类型检查,不是运行时。
  2. TS 是编译时类型检查,不是运行时。
  3. TS 是编译时类型检查,不是运行时。

重要的话说三遍。

你这代码明明已经限定了数组里所有元素都是 TFailSqlType、还想传个确定一定肯定不是 TFailSqlType 的对象进去,TS 当然会给你报错了,因为你那个 2 是在编译期间就存在的一个字面常量,它的类型已经是确定的了。

如果你是想验证来自外部传入的(比如这个参数是用户手动输入、或来自某个 AJAX 接口返回字段)、类型在编译期间并不能确定、等到运行时才能知道的,那你要么把这个变量声明成 any、要么就手动断言一次:

const key = '2' as TFailSqlType;
FAIL_LIST.includes(key);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进