【发布时间】:2022-01-21 05:39:10
【问题描述】:
我正在尝试提取与事件处理程序模式匹配的接口的键(使用keyof) - 即(CustomEvent) => void。
我有一个似乎有效的方法,它只提取与(CustomEvent) => void 匹配的键,但是,它也提取类型为() => void 的键。
有没有办法只提取符合(CustomEvent) => void 的类型的键?
方法基于问题 Filter interface keys for a sub-list of keys based on value type 和 Typescript : Filter on keyof type parameter
在下面的例子中
export interface JayCustomEvent {}
type EventHandler = (e: JayCustomEvent) => void;
type FilteredKeys<T, U> = { [P in keyof T]: P extends string ? (T[P] extends U ? P : never) : never}[keyof T];
interface AComponentEvent extends JayCustomEvent {}
interface AComponent {
anEvent(e: AComponentEvent): void,
noParamFunction(): void,
someOtherFunction(a: number): void
someProp: string
}
let a: FilteredKeys<AComponent, EventHandler> = 'anEvent'
let b: FilteredKeys<AComponent, EventHandler> = 'noParamFunction'
let c: FilteredKeys<AComponent, EventHandler> = 'someOtherFunction'
let d: FilteredKeys<AComponent, EventHandler> = 'someProp'
我希望分配 a 能够正常工作,而 b、c 和 d 不应该。
但是,分配 a 和 b 有效,而只有 c 和 d 无效。
【问题讨论】:
标签: typescript generics