首页 > 解决方案 > Typescript 在函数错误中使用泛型类型索引数组属性

问题描述

interface AllEvents {
    showDialog: (dialogName: string, props: Record<string, any>) => void
    loading: (isLoading: true | false) => void
}

type Events = {
    [key in keyof AllEvents]: AllEvents[key][];
};
const commonEvents:Events  = {
    showDialog: [],
    loading   : [],
};

function subscribe<K extends keyof AllEvents>(eventName: K, callback: AllEvents[K]) {
    let a =commonEvents[eventName]
    a.push(callback);  //error
}

错误来了 a.push(callback);

TS2345:“AllEvents[K]”类型的参数不可分配给“((dialogName: string, props: Record<string, any>) => void) & ((isLoading: boolean) => void)'类型的参数.

 Type '((dialogName: string, props: Record<string, any>) => void) | ((isLoading: boolean) => void)' is not assignable to type '((dialogName: string, props: Record<string, any>) => void) & ((isLoading: boolean) => void)'.

 Type '(dialogName: string, props: Record<string, any>) => void' is not assignable to type '((dialogName: string, props: Record<string, any>) => void) & ((isLoading: boolean) => void)'.

 Type '(dialogName: string, props: Record<string, any>) => void' is not assignable to type '(isLoading: boolean) => void'.

 Type 'AllEvents[K]' is not assignable to type '(dialogName: string, props: Record<string, any>) => void'.

 Type '((dialogName: string, props: Record<string, any>) => void) | ((isLoading: boolean) => void)' is not assignable to type '(dialogName: string, props: Record<string, any>) => void'.

 Type '(isLoading: boolean) => void' is not assignable to type '(dialogName: string, props: Record<string, any>) => void'.

 Types of parameters 'isLoading' and 'dialogName' are incompatible.

 Type 'string' is not assignable to type 'boolean'.

commonEvents[eventName]可以showDialog和它的类型应该是 ((dialogName: string, props: Record<string, any>) => void)[]什么问题?

标签: typescriptgenerics

解决方案


推荐阅读