我想创建一个 type ( ) ,它将被定义为具有扩展的U某些给定类型的键。这个新类型的值将被定义为函数,该函数将采用原始类型上该键的值类型并返回相同的类型。TTObjectT
例如,如果我有以下类型I1:
interface I1 {
a: number;
b: Date;
}
Run Code Online (Sandbox Code Playgroud)
那么就U<I1>等于:
{
a: (x: number) => number;
b: (x: Date) => Date;
}
Run Code Online (Sandbox Code Playgroud)
我确实看过一些类似的选项keyof,但我还没有弄清楚如何最好地做到这一点。我尝试过,例如:
export type U<T extends {}, K extends keyof T, V extends T[K]> = Record<K, (x: V) => V>;
Run Code Online (Sandbox Code Playgroud)
但是您需要为每个泛型定义显式类型。似乎可以使用key remapping来重新映射 ts 4 中的键,但现在我被困在 3.7.1 上。
关于如何实现这一目标有什么想法吗?
我认为这样的事情应该有效:
type U<T> = {
[Prop in keyof T]: (x: T[Prop]) => T[Prop];
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法进行测试:
type Test = U<I1>;
Run Code Online (Sandbox Code Playgroud)
当您将鼠标悬停在上面时,Test您应该会看到所需的签名。
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |