问题标签 [keyof]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
583 浏览

javascript - TypeScript 数组类型转换与 keyof 类似的方法

我正在尝试实现类似将具有指定值类型的一种数组类型克隆为具有返回指定值的函数的数组。

假设我们有如下数组元组:

我想要的是从中获取生成的类型,例如:

我尝试的是keyof使用用法制作类型别名:

它几乎可以工作,除了它还会检查方法,Array所以如果我要做:

它会触发我的错误,例如某些方法没有返回正确的类型

0 投票
1 回答
1336 浏览

typescript - keyof 和 Lookup Types 对的联合类型

从这些类型:

我想得到这样的类型:

我如何定义 X 以便我可以做到:

0 投票
0 回答
763 浏览

typescript - keyof 返回具有索引签名的不同类型

keyof当我有一个带有索引签名的接口时,我对如何工作感到有些困惑。

例如,如果我有一个如下界面:

我想要一个函数,它的参数只能是 的有效属性InterfaceOne,例如:

在上面的函数中,我应该能够调用test('a')or test('b'),但是test('c')应该会导致编译错误,因为cis 不是InterfaceOne.

当我有索引签名时,这似乎不起作用InterfaceOne

type myType = keyof InterfaceOne返回string | number。如果我删除索引签名,它会"a" | "b"按预期返回。

有人可以解释为什么添加索引签名会改变返回的类型keyof吗?另外,我可以强制参数是属性名称的正确方法是InterfaceOne什么?

0 投票
2 回答
7230 浏览

typescript - 制作一个泛型类型数组需要 T 的所有键

我想声明一个需要给定类型的所有键都T包含在数组中的类型,例如:

目前,如果一个 call checkKeys<MyType>,TS 将认为传递的值如果它包含MyType( id | value) 的任何键是有效的:

是否可以要求在数组中指定所有键?

0 投票
2 回答
8041 浏览

typescript - 打字稿:将函数的参数约束为与特定类型的值关联的对象的键

有没有办法进行以下类型检查?

我想指定它key不仅应该是 的键T,而且应该是具有number值的键。

0 投票
1 回答
45 浏览

javascript - 如何更改索引表达式的类型?即:c[k]

我的代码

IPAsset 的接口


问题出在这一行:

Typescript 期望 k 是一个数字c[k],而实际上它是 ILPAsset 中对象的键,在我的情况下它是字符串symbol

这将如何在 Typescript 中处理?

更新

顺便说一句,这是一种更简单的方法,但是对于未来有关密钥检查的问题,我得到了很好的答案:D

0 投票
2 回答
161 浏览

typescript - 强制对象字面量中的数组只能包含外部对象的键

我有以下接口定义。

我希望“子”属性只接受已定义组件的键。在“root.children”属性的情况下,它应该只接受 root、button1 和 button2:

但它也接受任意字符串,如示例“ button3 ”。

0 投票
1 回答
18 浏览

typescript - 使用构造函数赋值的不同行为的关键

我正在使用构造函数赋值遇到“keyof”的不同行为......

这是代码

我不明白为什么会这样,有人可以解释一下吗?

谢谢!!

0 投票
1 回答
677 浏览

typescript - 将打字稿 ReturnType 与泛型类型的 keyof 和迭代键一起使用

我正在尝试遍历对象中的函数并获取它们的返回类型以进行一些过滤,如下所示:

上面的代码将显示以下错误:

类型 'T[K]' 不满足约束 '(...args: any[]) => any'。

在此处输入图像描述

如错误所述, ReturnType 需要一个函数,对吗?还是我在这里遗漏了什么?

如何告诉 ReturnType 我正在传递一个函数?

0 投票
1 回答
90 浏览

javascript - 映射对象键时使通用对象可选(在 keyof 中)

我在映射中遇到问题keyof。我正在尝试映射Routes类型,但是当我映射对象时,它会破坏Route.

这里params应该是必需的,但 TS 忽略它:

我需要RouterouteNameand输入params。如果params是通用对象,则使其成为可选对象。

这是我的代码。如果您称它为IRoute我所期望的那样工作。但是当IRoute从映射中调用时,keyof它会中断并且params对于所有路由都是可选的。

这是一个TS游乐场