Typescript 返回函数参数的"and"而不是"or"



我目前正在用Typescript开发一个React Native应用。

我有一个从服务器下载的大量数据和一个保存所有数据在相应表中的功能。

static insertVariousTable = (table: TypeTables) => {
switch (table) {
case 'clase':
return Clase.insertVarious;
case 'estadoequipo':
return EstadoEquipo.insertVarious;
case 'formapesopatron':
return FormaPesoPatron.insertVarious;
}
};

调用函数时,类型是:(注意,返回类型可以是它们中的任何一个,我的意思是"或"(|)而不是"and"(&)这对我来说没问题)

let insertVarious: ((rows: ClaseType[]) => Promise<unknown>) | ((rows: TypeEstadoEquipo[]) => Promise<unknown>) | ((rows: FormaPesoPatronType[]) => Promise<...>) | undefined

但是当我试图用await(在async函数中)调用函数时,它会将函数参数的类型更改为"one_answers"(,)。

async function download(res:IRes){
for (key in res.data) {
if (Object.prototype.hasOwnProperty.call(res.data, key)) {
const tabla = res.data[key];
let insertVarious = DbRequests.insertVariousTable(key);
if (insertVarious) {
await insertVarious(tabla);
}
}
}
}

等待insertVarios(tabla)"参数类型变为:(带"and"(,))

let insertVarious: (rows: ClaseType[] & TypeEstadoEquipo[] & FormaPesoPatronType[]) => Promise<unknown>

我需要的类型是"或"所以我可以发送它们中的任何一个,我该如何解决这个问题?

请帮…

Thanks in advance

试试这样:

let insertVarious: 
| undefined 
| <T extends ClaseType | TypeEstadoEquipo | FormaPesoPatronType>((rows: T[]) => Promise<unknown>)

或者,如果您关心返回类型:

let insertVarious: 
| undefined 
| <T extends ClaseType | TypeEstadoEquipo | FormaPesoPatronType>((rows: T[]) => Promise<T extends FormaPesoPatronType  ? <...> : unknown>)

你的问题与GitHub上发布的这个问题有关,可以通过定义InsertVariousType来解决:

type InsertVariousType = (<T extends Array<ClaseType | TypeEstadoEquipo | FormaPesoPatronType>>(rows: T) => Promise<unknown>) | undefined

,并使用此类型将DbRequests.insertVariousTable的返回值强制转换为InsertVariousType

async function download(res:IRes){
for (let key in res.data) {
if (Object.prototype.hasOwnProperty.call(res.data, key)) {
const tabla = res.data[key as TypeTables];
const insertVarious = DbRequests.insertVariousTable(key as TypeTables) as InsertVariousType;
if (insertVarious) {
await insertVarious(tabla);
}
}
}
}

看到操场

最新更新