gpt4 book ai didi

typescript - 如何将 "keyof T"表示为 String 的子集?

转载 作者:搜寻专家 更新时间:2023-10-30 20:42:33 25 4
gpt4 key购买 nike

Firebase 类型有一个接口(interface) IQuery其中有 equalTo()方法类型为:

public equalTo(value: number | string | boolean | null, name?: string): IQuery;

我有一个模拟库,它试图模仿 Firebase 公开的 API 表面,但在 name 的情况下参数“字符串”的一般类型可以更具体:

 public equalTo(value: number | string | boolean | null, key?: keyof T): IQuery<T>

通过说明 keyof T我们得到了一些我不想错过的非常有用的静态检查,事实上在 TypeScript 2.8.3 之前我似乎能够做到这一点但是当移动到 2.9.x 时+ typescript 我现在得到这个错误:

Type 'string' is not assignable to type 'keyof T'.

关于更多上下文,我的模拟库中的类定义是:

 export default class Query<T = any> implements IQuery<T> { ... }

哪里<T>通用类型是查询将返回的数据结构类型的指示符。

此外值得注意的是,T,将始终被塑造成带有字符串键的字典/哈希,因此 keyof T将是字符串值的子集,但在我打字时我没有说清楚所以我得到了 Typescript 出现问题的地方......我只是不知道如何表达 keyof T必须是字符串。

最佳答案

这与方式的改变有关keyof适用于 2.9,直到 2.9 keyof只返回 string键,从 2.9 开始它将返回 numbersymbol键。这是 this 的引用

只接受string你可以使用的键 Extract<keyof T, string>作为 key 的类型参数,或者如果你想恢复到旧的行为,你可以使用 --keyofStringsOnly编译器标志

public equalTo(value: number | string | boolean | null, key?: Extract<keyof T, string>): IQuery<T>

关于typescript - 如何将 "keyof T"表示为 String 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50653704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com