ts 高级类型之 索引类型 keyof

详解

直接上图:

图上已经详细介绍 keyof 的用法, keyof KeyCls 相当于 id | name,如果传参不符合 编辑器会报错,其次 ts 编译的时候会报错:

1
error TS2345: Argument of type '"id"' is not assignable to parameter of type '"name" | "age"'.

keyof 是在编译时 做的类型检查,编译后并没有实际代码。

实现

那么思考一下,若用 js 来实现,是怎样呢?

自己的思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const KeyCls = {
id: null,
name: null,
};

function main(data) {
if (!Object.keys(KeyCls).includes(data1)) {
const types = Object.keys(KeyCls).join("|");
throw new Error(`Argument of type '${data1}' is not assignable to parameter of type '${types}'`);
}
}

main("id"); // 通过
main("fs"); // 报错

这么看来 keyof 还是挺方便的,吹一波,真香……

参考

《Typescript 索引类型》

原创技术分享,您的支持将鼓励我继续创作