说我想写一个像Merge这样的实用程序类型

type Merge<A, B> = {
  [P in (keyof A | keyof B)]: P extends keyof A ? A[P] : B[P]  
}

但是,上面的代码会得到

类型“ P”不能用于索引类型“ B”。

虽然我可以这样写

type Merge<A, B> = {
  [P in (keyof A | keyof B)]: P extends keyof A ? A[P] : P extends keyof B ? B[P] : never
}

但这不是很冗长吗?

我已经限制了P in中的P in (keyof A | keyof B)类型P in (keyof A | keyof B) ,那么为什么P extends keyof B仍然需要的P extends keyof B

  ask by xianshenglu translate from so

本文未有回复,本站智能推荐:

1回复

打字稿-类型'字符串'不能用于索引类型

我正在将Vue.js与TypeScript一起使用,并且在使用动态对象键时遇到了一些错误。 这是我的功能: 这是我得到的错误: ERROR in /app/src/views/BackupAndRestore/BackupAndRestoreWebspaceBackup.vue(484,9):
1回复

元素隐式具有'any'类型,因为类型'string'的表达式不能用于索引类型React Typescript

如果类型是绿色或不喜欢红色,我正在尝试给react中的组件提供条件颜色。 这将在javascript中工作,但是使用打字稿时出现错误: 元素隐式地具有“ any”类型,因为类型“ string”的表达式不能用于索引类型“ {”,例如:string; 不喜欢:string; }'。 在类型'{上未
2回复

TypeScript - Element隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型

假设我有这个: 错误是底部附近的color[e] : Element隐式具有'any'类型,因为'string'类型的表达式不能用于索引类型'{red:null; 绿色:null; 蓝色:null; }”。 在类型'{red:null;上找不到带有'string'类型参
1回复

TypeScript:隐式具有“ any”类型,因为类型“ string”的表达式不能用于索引类型

我试图将在Vue中使用的自定义钩子从JavaScript转移到TypeScript,以处理i18n,但我不断收到以下错误: Element implicitly has an 'any' type because expression of type 'string' can't be use
1回复

类型“ T”不能用于索引类型“ Class”

我正在寻找使特定类的Parameters通用的打字稿。 但是我得到这个错误: 类型“ T”不能用于索引类型“ UserRepository” 还尝试了这个: 我目前有这个: 我想创建两个泛型ClassMethod和ClassMethods 。 要
1回复

类型“ test”不能用于索引类型“ T”

知道如何实现吗? ...或动态地: 不幸的是,编译器说Type '“test”' cannot be used to index type 'T' 。 我正在使用TypeScript 2.4.2。
1回复

类型“键”不能用于索引类型“对象”

试图用声音类型实现功能弹拨,但是我做错了: TS错误: 类型“键”不能用于索引类型“对象”
1回复

打字稿错误-类型'string []'不能用作索引类型

我的Ionic / Angular应用程序出现打字错误。 下方显示: 类型'string []'不能用作索引类型。 我不明白。 整个错误是: [17:57:57]打字稿:C:/ xampp / htdocs / project x / anonymous-soci
2回复

Typescript条件类型不适用于不同的返回类型

我想基于通用值返回不同的类型。 例如: 但是我遇到一个错误: 类型string []不能分配给类型T扩展Base? string []:字符串
1回复

如何在不忽略TypeScript警告的情况下测试Object是否具有键值:'string'不能用于索引类型?

我想编写一个看起来像这样的简单函数 现在,我知道我可以这样解决 但是似乎我在撒谎我的代码... 例如,如果我写这样的话 使用这个工具会很奇怪,因为这两个原因 如果我知道运行时之前的数组,则完全不需要使用该实用程序 如果在运行时之前不知道它是否为数组,那么TypeScript会再次