问题标签 [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 回答
41 浏览

typescript - 如何从类型化对象的键中获取索引类型?

我之前使用过keyof运算符来获取对象的键,但我被困在这个简单的代码上。

我想得到的是

但我实际上得到

如果我删除对象上的类型约束,我会得到我所期望的,但我会失去类型安全性。

如何将类型保留在对象的定义中并从中获取索引类型?

0 投票
1 回答
54107 浏览

typescript - 在 TypeScript 中,“extends keyof”和“in keyof”是什么意思?

在 TypeScript 中,某些类型是使用extends keyofor定义的in keyof。我试图理解它们的意思,但到目前为止我还没有成功。

我得到的是keyof仅返回一个联合类型,该类型具有所有名称作为可能的值,这些名称作为属性名称存在于您在之后指定的类型上keyof

T因此等价于startsWith | endsWith | trim | substring | ...

这个对吗?

现在,如果我试着思考什么extends keyofin keyof意思,我的直觉会说:

  • extends keyof是派生自 的任何类型T,即它具有所有这些可能的值,但可能更多。
  • in keyof是从 中获取值的任何类型T,但不一定是所有类型(有可能,但可能更少)。

所以,从这个 POVextends keyof会描述一个>=关系,in keyof会描述一个<=关系。这个对吗?如果不是,什么是正确的?

0 投票
2 回答
733 浏览

typescript - 只允许特定类型的键

我有这个简单的函数来按日期对对象进行排序。但目前我必须在进行比较之前检查该字段是否真的是一个日期。在这种情况下,有没有办法限制K只允许某种类型的键Date

我想要的是:

有没有办法在打字稿中表达这一点

0 投票
1 回答
109 浏览

typescript - 如何在接口中链接 keyof 类型

不确定这是否可能,但这与keyof我很难思考的问题有关...

我目前有这个界面:

它的第一个用途是在给定对象和列的列表的情况下创建呈现表格的东西。

有没有办法摆脱函数中的any类型format?以某种方式“链接” keyof Toffieldvalueof format?即第一列value应该是string,第二列应该是number


(我知道手动打印这些会很容易,但也将在此表中添加一些自动魔法的东西,这将利用fieldand format

0 投票
0 回答
43 浏览

typescript - 获取对象内特定变量的键以在 typecript/javascript 中为字符串

我想动态访问一个对象,比如 object[variableName] 而不是 object["actual name of variable"]。

好的。假设我有一个看起来像这样的对象:

我想用它的属性动态访问这个对象。我需要在对象中获取特定名称的字符串,例如“key”/“name”或“address”。我不想用 typeof Object 来获取它们,而不是我想要的。

我正在寻找一种动态方式来访问这些密钥,如下所示:

然后访问 objects 变量,如下所示:

我不想像 object["test"] 那样访问它。因为它必须是动态的。

我知道如何为一个简单的变量而不是一个对象执行此操作:

但这仅适用于 {myVar} 不适用于 {object.test}

帮帮我 :)

我在方法中尝试了不同的 keyof typeof,但我无法弄清楚。

更新

这就是我发现的,虽然我对这个解决方案不是很满意:

为什么这种工作是因为 key 它承诺 key 存在于 Textboxquestion 中并且它确实存在,如果我写的东西在 textboxquestion 中不存在,它会引发编译错误。但我也不想说它是一个文本框问题:我希望以某种方式发现它。

0 投票
1 回答
49 浏览

typescript - 类型安全从字符串分配给对象的键

我试图弄清楚如何创建一个 typescript setter 函数,该函数接受一个对象、该对象的键以及要在该键上分配的值。

这是我到目前为止所拥有的:

如何键入value与 at 的类型匹配的此函数T[K]

0 投票
2 回答
521 浏览

typescript - 如何避免 TypeScript 中的动态 keyof 对象分配错误

假设我们的 TypeScript 代码如下所示:

这给出了错误

对于声明

如果我们改变keysto的定义

错误消失了,但我们失去了类型安全。

有什么方法可以避免这个错误,同时仍然保持类型安全?

0 投票
0 回答
36 浏览

typescript - 这两个键类型参数声明有什么区别?

当在某种已知状态周围使用通用包装器时,我在将子项转换为其父项时遇到了不兼容的类型错误。这个想法是如果Tomatoextends Fruit,那么Wrapper<Tomato>应该Wrapper<Fruit>可以工作。

游乐场链接

0 投票
1 回答
31 浏览

typescript - 无法理解 TypeScript 中 keyof 的语义

我有下面这个K extends keyof T声明 where 的简单例子,但是推断的返回类型的结果findMember却不同,我真的不明白为什么会有这样的差异。

我还在这里创建了一个指向 TypeScript Playground 的链接

0 投票
1 回答
508 浏览

typescript - 无法将参数传递给“forEach”

我想问一下为什么编译器不让我使用回调函数,forEach尽管据我所知"a" | "b" | "c" | "d"string. 请查看代码块后的错误消息。Record我想我可以用一种类型来解决这个问题,对吗?谢谢!

错误 TS2345:类型参数 '(value: "a" | "b" | "c" | "d") => void' 不可分配给类型参数 '(value: string, index: number, array: string []) => 无效'。
参数 'value' 和 'value' 的类型不兼容。
类型 'string' 不可分配给类型 '"a" | "b" | "c" | “d”'。