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

typescript - 无法使用 keyof 分配给字段

我想对我遇到的这个错误做一些解释:

以下是我发现的一些规避该错误的方法:

  • 如果 Test 仅包含数字或仅包含字符串
  • 如果我使用obj1[field as string] = obj2[field]
  • 如果我将方法更改为function f<K extends keyof Test>(obj1: Test, obj2: Test, field: K)

但我不明白为什么这段代码会失败,是打字稿中的“错误”还是我遗漏了什么?

0 投票
1 回答
53 浏览

typescript - 从对象数组中获取字符串文字类型

所以从:

我想像这样得到一个 Union 类型:

我不知道有什么样的语法或助手,也许根本没有。我意识到这种方式可能是倒退的,也许应该使用枚举,但在此之前,我想知道它是可能的。

我想做的一些虚构的例子,但我希望解决方案更复杂

以下是关闭的,但返回string

或以下;而不是我需要字符串文字的类型

有类似的问题,例如:TypeScript 中是否有类似于 `keyof` 的`valueof`?但他们不假设一组对象。

和这里的例子:https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html是类似的,但我不想返回类型,而是字段的值,所以我得到了一个联合类型。

0 投票
1 回答
37 浏览

string - 如何将界面key:value:string改为[{[key:string]:string}

我有界面

该值将是

我有适配器,他们有接收的方法

当我尝试这样做时:

我有错误:

我该如何解决?

(有趣,但是当我不使用签名 IUser 对象用户时 - 适配器工作......)

希望得到您的帮助。大谢谢!

0 投票
1 回答
27 浏览

typescript - 如何在 TypeScript 中返回特定类型的对象属性?

假设我在一个对象中有一个标志列表,如下所示:

我想编写一个getFlag如下所示的函数:

我怎样才能返回被调用any的标志类型,而不是返回?getFlag

(为了使这可能更容易,我们可以将标志类型限制为boolean,stringnumber,但不是返回boolean | string | number,我仍然想获取特定的属性类型)

0 投票
1 回答
35 浏览

typescript - 不能将索引访问类型与 T[Key extends keyof T] 一起使用

我发现自己经常使用像这样的数组

我想把它转换成字典/地图,例如

我经常使用reduce,但这会使代码忙碌。我想写一个通用的助手,我们可以确保我们映射的数组期望我们想要索引的键(在上面的例子中,key1)。

问题是[cur[key]]不会编译说明A computed property name must be of type 'string', 'number', 'symbol', or 'any'.

我相信索引访问类型只能是number | string | symbol,但我不明白为什么我必须指定其他任何内容,因为打字稿应该知道键类型只能是这些类型之一?正确的?

希望有人能告诉我我的误解在哪里。

0 投票
1 回答
15 浏览

typescript - 如何在打字稿中创建从联合类型派生的类型

我有以下类型

我需要创建另一种类型,DataTableRow<T>从它派生。从type MyData = { name: string; value: number; },它将具有以下形式:

它基本上是一个新联合类型的数组,为每个 keyof T 映射,我想使用泛型,因为这段代码是可重用的。这可能吗?