问题标签 [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 投票
2 回答
158 浏览

typescript - TypeScript 中 const 对象的索引类型是什么?

我想根据对象的值定义一个类型。

例如,

number但是如果我用作索引类型,TypeScript 会报告以下错误

一种解决方法是替换Readonly<string>keyof typeof foo

但它使语句更长更难阅读,特别是如果我使用的对象嵌套在另一个对象中,比如aaa.bbb.ccc.ddd.foo.


为什么Readonly<string>在上述情况下不起作用?

keyof typeof foo描述的最短形式'a' | 'b' | 'c'吗?是否有任何类型可以替换它并使语句更易于阅读?

0 投票
1 回答
56 浏览

typescript - 获取 TypeScript 中泛型类型的特定键的类型

我正在努力从updateArray我正在构建的这个通用函数中获得一个复杂的类型功能:

TypeScript 会在 if 语句和两个赋值语句中抱怨,但在调用签名中,它不会抱怨,并且是我正在寻找的严格类型检查,例如:

如果我省略类型UV, 并用 Typescript 替换它们T[keyof T]不会抱怨:

但这也不完全正确。T[keyof T]太灵活了:我可能将“错误”类型分配给给定的属性(例如,在给出的示例中,将布尔值分配给应该只包含字符串的属性,反之亦然)。显然,这种重新分配类型的行为在 JavaScript 中很好(这是 TypeScript 不会抱怨的原因之一),但对于我正在制作的这个函数来说,这是不受欢迎的。我真正需要的是某种typeof T[specific key], 以确保testValue,updateValuetestFailValue与正确的类型相对应,但specific key可以根据T.

可以做这样的事情吗?

0 投票
0 回答
35 浏览

typescript - 带有字符串自动完成 TS 的 Keyof 类型

所以我正在研究一种类型并希望获得对象键的推荐,如果我想使用另一个键,该类型可以回退到字符串类型。

我知道带字符串的联合类型基本上是所有可能的字符串,所以没有给出建议。

但是为什么虽然这种方法不起作用string | keyof Database ,但下面给出了预期的结果(string & {}) | DatabaseKeys>

在TS playground中找到更完整的示例。

0 投票
1 回答
644 浏览

typescript - 用于查询嵌套对象的带有点符号的打字稿类型安全字符串

我正在使用 Typescript 和 firebase,并且我有一个带有此功能的小型抽象层,可以根据其字段名称和值搜索唯一的文档库。

当我想使用文档底部的字段进行查询时,这很有效,例如:

模型:

询问:

但现在我想根据嵌套对象的 id 进行查询。

这给了我一个静态错误TS2345: Argument of type '"restaurant.restaurantId"' is not assignable to parameter of type 'keyof Order'.

如何修复我的函数,使其接受嵌套对象作为我的对象的键?

我不想用// @ts-ignore

0 投票
1 回答
61 浏览

typescript - TypeScript:意外行为的关键

目标类型已成功推断,但 keyof 未按预期工作。我究竟做错了什么?

我还创建了一个游乐场

0 投票
0 回答
36 浏览

typescript - 打字稿循环对象重写自身属性

我想重置 formData,ts 抛出错误form[key] = initialValue

我想要正确的语法覆盖值

0 投票
2 回答
488 浏览

python - 如何键入提示 getter 只允许 dict 键?

我想知道如何使这个吸气剂更加类型安全:

而不是str我想要的类型keyof VALUEStype(VALUES[key])类型。

get('4')然后应该抛出一个无效类型警告,因为这个键不存在。不确定这是否可以使用 Python,因为我正确地生活在 TypeScript 仙境中......:-)

TypeScript 应该看起来像这样:

0 投票
0 回答
41 浏览

angular - 制作打字稿参数keyof K和typeof FormGroup

我想传入一个对象,它是类 K 的键,并且具有或扩展 FormGroup 的类型,例如:

所以我称之为,keyof K 似乎有效,因为我只得到 K 个成员,还有其他成员,我只想从 FormGroup 类型中接收!

这将是函数调用:

谢谢

0 投票
1 回答
26 浏览

typescript - 通过泛型类型查找键入键

我正在尝试获得这样的强类型:

我现在的问题是,我想data根据所选的架构进行输入,但 TS 会抛出错误Type 'T' cannot be used to index type 'Data'.

预期的行为将是:

我怎样才能做到这一点?

0 投票
2 回答
135 浏览

typescript - 具有映射和条件类型的递归类型定义

我正在尝试想出一种方法来使用 TypeORM 获得更好的类型安全性。以下是一些示例 TypeORM 实体定义。

我正在尝试定义一种类型,该类型仅对作为实体本身的实体的属性有效。最好用一个例子来解释:

到目前为止,我想出了以下内容,但它不起作用,甚至可能还没有接近正确的答案: