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

function - Typescript中的泛型函数和推断泛型的keyof

我正在尝试从以下函数中删除第二个泛型,因为(恕我直言)应该可以推断出K extends keyof T

该功能的作用对我的问题并不重要。这都是关于签名的第一部分<T, K extends keyof T>。我宁愿只写<T>。因为那样调用函数会更容易。

我已经定义了一个正是我想要的接口,但是如何添加实现呢?

0 投票
1 回答
610 浏览

typescript - Typescript + keyof. Declaring an object transformation

im trying to understand keyof.

I want to describe a function which receives an object { a : 1, b : 'anything'} and should return something like { a: true , b: false } (same keys, but always boolean values).

But when I write (example)

... TS says me param must be string or number.

That makes sense, since K can be a map. How could I avoid that error? How could I declare that K is a plain JS object (so its keys are always string)? K extends {} doesnt work.

0 投票
1 回答
233 浏览

typescript - 部分的仅适用于内联值

为什么下面的代码表现得像这样?它是 TypeScript 编译器中的错误还是缺少功能?

我使用了 TypeScript 2.1.6 版

0 投票
2 回答
14903 浏览

typescript - TypeScript:如何处理泛型类型和 keyof 运算符

我尝试编写一个通用函数来组装数据库更新的更新数据。

传递的参数:

  • 待更新记录
  • 属性键
  • 一个新的数组项

即使我使用 限制键的类型keyof R,我也无法将具有该键的新对象分配给Partial<R>常量。我收到错误我该Type '{ [x: string]: any[]; }' is not assignable to type 'Partial<R>'.怎么做才能使以下代码正常工作?如果我用R非泛型类型替换泛型类型,它就可以工作。但这不是我需要的。

TypeScript Playground 上的代码段

0 投票
3 回答
3556 浏览

javascript - 合并打字稿中的类型(将键添加到现有的 keyof 类型)

如果我有一个由键组成的打字稿类型:

然后我希望将密钥添加到该类型,同时保留当前密钥,我该怎么做呢?
例如,如果我想将键 'get_value1'、'get_value2'、'get_value3' 添加到类型 'objectKeys'

最后,我想要一个看起来像这样的类型:

无需手动定义以“get_”为前缀的键,我知道我可以输入键来创建这个对象——但这对我的用例来说是不可行的。我只是想将一些可能存在或不存在的键添加到类型“objectKeys”中

我也知道我可以创建允许任何键值的泛型或任何类型,但是我必须知道实际的键名。允许请求对象的任何键对我没有帮助,我需要现有的键+我想添加的键。

谢谢你的帮助。

为清楚起见添加:

希望那更清楚等等。

0 投票
2 回答
655 浏览

typescript - 通用 keyof 和属性 getter 函数

我正在尝试观察数组中对象的属性。为了使其类型安全,我使用 getter 函数来获取包含要观察的实际属性的数组对象(如有必要)的子对象。

propertyName / key必须是一个字符串,因为我正在使用的观察库需要它。

getter 应该能够接受返回与传入相同类型的函数,例如o => o.

您可以在下面找到一个精简的示例:

唉,这抛出Argument of type '"c"' is not assignable to parameter of type 'never'.

但以下确实有效:

为什么编译器无法推断出的类型,B是否有我可以使用的解决方法?

0 投票
1 回答
66 浏览

typescript - 用 T[K] 定义地图

我目前正在从 JS 过渡到 TS 并且无法完全理解keyof。我找到了https://github.com/kimamula/TypeScript-definition-of-EventEmitter-with-keyof,现在我正在尝试实现这一点。一切都很顺利,直到我打开“noImplicitAny”。

我在 ts 操场上做了一个例子来展示我遇到的问题:

在构造函数中没有访问权限,K所以我必须明确地制作 Map(arg: any)才能让它工作。

创建地图时是否有避免使用任何解决方案的解决方案?

0 投票
2 回答
3232 浏览

typescript - 打字稿:推断嵌套keyof属性的类型

我想定义一个 Array 类型,它必须包含给定类型的嵌套属性名称链。

假设我有一个类型:

现在我想定义一个包含 2 个元素的 Array 类型:

我想像这样使用它:

所以我希望编译器检查包含的 2 个属性名称是否是 Foo 的嵌套属性名称。

但是我不能只用 1 个通用参数定义 PropertyList,然后我得到这个错误:

知道如何推断嵌套的 keyof 类型而无需指定它们吗?

0 投票
1 回答
43 浏览

typescript - 在 TypeScript 中,如何声明具有 2 个参数的泛型,其中第一个是返回特定类型的第二个键?

我正在寻找一个像这样的通用类:

显然,上面的代码无法推断出的类型,t[ID]我们得到了一个隐含的any. 我怎样才能强制使用泛型T[ID]将是一个string

0 投票
1 回答
3333 浏览

arrays - 带有对象数组的打字稿的 keyof

我对打字稿很陌生,很难找到一些关于keyof. 如果你有

你得到什么类型的BC?我希望从中得到一种类型keyof是 the will be name | val | active。我是否正在寻找一种看起来像B,C或完全不同的方法?

或者有一种简单的方法可以打印类型keyof吗?这会让我弄清楚这一点。