这听起来很奇怪,所以一个示例可以更好地定义问题:
具有Model
,我不需要键K
,其中Model[K]
是给定类型GivenType
(非通用)。
因此,我想一个不错的开始是<Model, K extends keyof Model>
,但这并不能使Model[K]
的类型为GivenType
。
答案 0 :(得分:1)
type NonFunctionPropertyNames<T> = {
[K in keyof T]: T[K] extends Function ? never : K;
}[keyof T];
interface Part {
id: number;
name: string;
subparts: Part[];
updatePart(newName: string): void;
}
type T41 = NonFunctionPropertyNames<Part>; // "id" | "name" | "subparts"
所以,在我们的例子中:
type ModelProperty<T> = {
[K in keyof T]: T[K] extends Model ? K : never;
}[keyof T];