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

typescript - 从(不同)对象类型的数组中获取所有键

我有一个 FooBar 类型,它包含具有不同道具的对象。我想从所有对象中获取密钥。我认为可以通过使用来获得,keyof FooBar[number];但它只返回公共键。

如何获取所有对象的所有键?

0 投票
0 回答
71 浏览

typescript - 使用 Keyof 类型运算符获取类型的键

我有这个身份界面

我想在运行时获取一个包含所有键的字符串数组。

如果它是一个类,那么使用构造函数会很容易(如此处所建议)。

我发现了其他类似的问题,一些关于Keyof Type Operator的问题,最相关的是:

然而,在上述问题中,keyof 的结果仅用作类型/值约束。如何使用 keyof 运算符将键作为字符串数组获取呢?从接口定义或类也是不可能的吗?

TypeScript 自定义转换器

这个项目,一个自定义转换器,完全符合我的要求:获取给定类型的键。

我想知道是否有更简单的方法,可能只使用 keyof 运算符来获得相同的结果。

0 投票
2 回答
144 浏览

typescript - 打字稿'keyof'更改原始属性可选?

定义这样的接口

当我做这样的事情时,没关系

但是,像这样,我收到了一些错误消息

另一个

为什么 MyOmit 会出错?

0 投票
1 回答
78 浏览

typescript - 有条件地在打字稿中获取接口属性的类型

这是我的界面:

我可以获得如下任何属性类型:

但是我想让它成为有条件的,这样如果200接口中不存在属性,它应该返回 for 的类型204,如下所示:

如果两者都200存在204,则上面的示例将起作用,否则将抛出一个错误,抱怨该属性不存在。

请注意,我无法更改Responses界面,因为它位于自动生成的文件中。

我该怎么做呢?

0 投票
2 回答
223 浏览

typescript - 如何在 Typescript 中将默认值设置为具有 keyof 类型(来自显式类型)的参数

我在 Typescript 将默认值传递给类似于pickfrom lodash的函数时遇到问题。

该函数接受一个已知(非通用)接口的对象和一组键以从该对象中选择和返回。

该函数的常规(无默认参数)声明可以正常工作,但是,我似乎无法将数组设置为选择要选择的属性的参数的默认值。

如果您删除默认值= defaultProps,它将成功编译,并且返回的类型从示例调用中也是正确的,例如:const testPick = pick(testPerson, ['name']);

但是,设置默认值会产生以下错误:

如何成功地将默认值传递给props参数?

打字稿游乐场链接在这里

更新

在玩了一会儿之后,我尝试使用条件类型并设法使函数签名正常工作,但是现在无法正确识别 reduce 的问题:

更新游乐场

0 投票
0 回答
85 浏览

typescript - 如何声明一个扩展具有方法返回类型的抽象类的类型,包括在打字稿中的 keyof

TS2345:'Card' 类型的参数不可分配给'AbstractCard' 类型的参数。'getKeys()' 返回的类型在这些类型之间不兼容。类型“(keyof Card)[]”不可分配给类型“(keyof AbstractCard)[]”。类型“keyof Card”不可分配给类型“keyof AbstractCard”。类型“bar”不能分配给类型“keyof AbstractCard”。

通过使用泛型解决

0 投票
1 回答
41 浏览

typescript - 使用 const 断言从对象生成所有键的联合类型

我有一个这样的对象(在 ts playground 中演示):

我想做的是创建一个包含所有使用过的键的联合类型,我可以这样做:

但是,我还想将类型安全添加到sites初始化中,其中所有对象值都是这样的某种类型(在 ts playground 中演示):

这在创建时提供了一些类型检查sites,但也从最终类型中删除了const 断言,所以现在 SiteNames 只是解析为一个字符串:

问题:有没有办法两者兼得?创建时强类型Record<any, ISiteDetails化还能将所有对象键提取到新的联合类型中吗?

解决方法:不符合人体工程学,但我可以通过将站点重新分配给这样的导出变量来添加最后一层类型检查(在 ts playground 中演示):

0 投票
1 回答
58 浏览

typescript - 尝试使用 keyof ObjectType 变量设置对象属性时,类型“any”不可分配给类型“never”

在下面的代码中,typscript 编译器在更新方法中显示错误,说“任何”不能分配给“从不”类型。我注意到当类型包含与其他类型混合的布尔值时,keyof 类型不起作用。我怎样才能使它编译在类型中有混合类型值?

但这编译:

0 投票
1 回答
26 浏览

javascript - TS keyof typeof does not allow object.keys() to be assigned?

I do not understand what the problem is with this code.

Here is my code:

export type SportsTypes = keyof typeof SportsIcons

export const 

I do not understand what the problem is with this code.

Here is my code:

I am typing my variable to the keys of an object. But, when I then try to assign an array of said keys to this variable, I get the ts error: Type 'string[]' is not assignable to type '("Football" | "GameController" | "Tennis" | "Basketball" | "PingPong" | "Volleyball" | "HockeyPuck" | "Chess" | "AmericanFootball" | "Baseball" | "SandVolleyball")[]


0 投票
1 回答
54 浏览

typescript - 获取泛型中动态字段的类型(TypeScript)

目前我有以下设置。

当我foo作为 Column.key 传递时,我希望 Column.formatter 的参数类型valuestring. 因为bar它应该是number

原样;Typescript 期望类型是所有可能的类型T。所以stringnumber

是否可以根据给定的键设置类型?