来自对象的自动 TS 类型

帕维尔·佩列维泽夫

我有这样的代码:

import { ApolloClient } from '@apollo/client';

type F = typeof FeaturesManager.features.warrants

export class FeaturesManager {
  static features = {
    warrants: Symbol('WARRANTS'),
  };

  client: ApolloClient<{}>;

  constructor({ client }: { client: ApolloClient<{}> }) {
    this.client = client;
  }

  getFeatureAvailability(feature: F) {

  }
}

new FeaturesManager(new ApolloClient()).getFeatureAvailability(FeaturesManager.features.warrants)

现在,当我改变时,FeaturesManager.features我也需要改变F如何修复此代码?

更新

游乐场

哈昆瓦尔

要添加所有功能,您可以使用keyof迭代器提取所有键并使用它们对类型进行索引。

对于您上面的示例,代码应如下所示

type F = typeof FeaturesManager.features[keyof typeof FeaturesManager.features]

或者更清洁的方式可能是

type ValueOf<T> = T[keyof T];
type F = ValueOf<typeof FeaturesManager.features>

我注意到的另一件事是您使用的符号可能不是最好的,因为打字稿可能无法识别差异。将枚举或字符串用于功能可能会更好,您将获得更好的打字稿支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对象的类型为“未知”.ts

来自同一目录的自动引用.d.ts类型

无法在TS中为对象分配类型

遍历并检查对象TS / JS的类型

如何使TS自动推断映射类型的类型参数?

TS定义返回对象中动态属性的类型

Angular Component.ts 模块中的对象类型问题

获取地图返回对象的类型。打字稿ts(2345)

io-ts对象类型名称在WebStorm中丢失

错误TS2318:找不到全局类型“对象”

如何从 TS 文字联合类型推断对象的键和值?

对象的类型为“未知”。ts(2571) 与 Vuejs 和 Typescript

错误:自动绘图不支持 ts 类型的对象。无法编织 RMarkdown(包 `fpp2` 与 `fpp3`)

错误 TS2322:“对象”类型不可分配给“产品”类型

错误TS2345:类型“ T”的参数不能分配给类型“对象”的参数

我收到错误消息“只能从对象类型创建扩展类型。ts(2698)”

TS2322:类型“对象”不可分配给类型“商店”

错误TS2322:类型“对象”不能分配给类型“电影”吗?角度7

如何声明 TS 类型,该类型是具有类型为数字或字符串值的属性的对象数组?

来自fp-ts和URI的打字稿中的更高种类的类型

在 v-for 指令中使用 :key 属性时来自 TS 的预期类型错误

在 Typescript 中,try...catch 错误对象显示“对象的类型为 'unknown'.ts(2571)”

努力在TS中建立类型

React TS函数参数类型

TS概念类型名称约束

自动绘图不接受ts对象

Typescript:TS7017对象类型的索引签名在循环中隐式具有“ any”类型

错误TS7017:对象类型的索引签名在表单验证angular 2中隐式具有“ any”类型

错误 TS2322:“对象”类型不可分配给“联系人”类型。角