你想在这里使用generics:
async paginate<T>(
msg: Message,
title: string,
data: Array<T>,
message: (
currentData: T,
) => Promise<string | { title: string; description: string }>,
perPage = 10,
): Promise<void> {
// Function code here
}
本质上,这告诉 Typescript data 是一个 T 类型的数组,并且 message 接受一个名为 currentData 的参数,该参数也具有 T 类型,其中 T 类型将在稍后决定在函数调用期间。所以,如果你的数据类型是string,你可以这样称呼它:
paginate<string>(
// parameters
)
当数据很复杂时,比如 Person 类型定义为 type Person = {name: string, age: number},您可以使用新的类型参数调用相同的函数,如下所示:
paginate<Person>(
...
)
您的data 和currentData 将针对Person 类型进行验证。
这是一个简短的例子
type Message = number;
function paginate<T>(
msg: Message,
title: string,
data: Array<T>,
message: (
currentData: T,
) => Promise<string | { title: string; description: string }>,
perPage = 10,
): Promise<void> {
return Promise.resolve();
}
// OK
paginate(1, '123', [1,2,3], (a: number) => Promise.resolve('something'));
// OK
paginate(1, '123', ['a','2','3'], (a: string) => Promise.resolve('something'));
// Error
paginate(1, '123', ['a','2','3'], (a: number) => Promise.resolve('something'));
// Error
paginate(1, '123', [1,2,3], (a: string) => Promise.resolve('something'));
TSPlayground link