gpt4 book ai didi

值具有类型的 typescript keyof

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:18 50 4
gpt4 key购买 nike

我正在尝试用 Typescript 编写一个函数,它需要:

  • 一个对象,它至少有一个 X 类型的成员(在这个例子中: bool 值)
  • 指向所述值的对象的键

    (eg. {someValue: true} -> key="someValue")

目前我的做法是这样的:

function myFunction<
T extends Record<K, boolean>, // the type of the object
K extends keyof T, // the key which points to X
>(
obj: T,
objKey: K,
) {
const x: boolean = obj[objKey];
}

只要我只需要对象的类型是 T 就可以了并且没有其他类型。但是,我现在需要一个同时实现 T 的对象。 (具有 bool 成员的对象)和 AdditionalData .但是,如果我更换 T extends Record<...>T extends Record<...> & AdditionalData , 类型检查当然失败了。

我想到的解决方案是引入另一个泛型类型 L ,其中仅包含来自 SomeInterface 的数据并制作K取决于:

function myFunction<
L extends Record<K, boolean>, // the type containing the boolean value
K extends keyof L, // the key which points to X,
T extends L & AdditionalData, // the type of the object
>(...) {}

但是,这也不起作用。

有没有办法强制键指向的值是特定类型?

编辑:或者,有没有办法从 keyof 中排除特定值? ?这样,我就可以从 K 中排除任何其他类型...

最佳答案

Typescript 并不总是能很好地推断通用参数类型字段的类型。我不确定到底是什么导致它无法识别 obj[objKey] 是一个 boolean 这一事实,但简单的解决方法是使用一个额外的变量:

interface AdditionalData {
a: number,
b: string
}

function myFunction<
T extends Record<K, boolean> & AdditionalData, // the type of the object
K extends keyof T, // the key which points to X
>(
obj: T,
objKey: K,
) {
const o : Record<K, boolean>= obj; // assignable
const x: boolean = o[objKey]; // access works ok
}

关于值具有类型的 typescript keyof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52701861/

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