英文:
Using type inheritance for a handler function in typescript
问题
Here's the translated code portion:
假设我有以下代码:
```javascript
import { Telegraf } from "telegraf";
const bot = new Telegraf(process.env.BOT_TOKEN || "");
bot.on("text", async (ctx) => {
console.log(ctx.message?.text);
});
在这里,ctx
参数具有一个长而奇怪的类型,可以访问许多属性。
现在,我想将其更改为使用类型 AnStrangeType
的处理函数:
async function handleMessage(ctx: AnStrangeType): Promise<void> {
console.log(ctx.message?.text);
}
bot.on("text", handleMessage);
是否有一种方式可以实现处理函数的参数的类型继承?
<details>
<summary>英文:</summary>
Assume I have this code:
import { Telegraf } from "telegraf";
const bot = new Telegraf(process.env.BOT_TOKEN || "");
bot.on(message("text"), async (ctx) => {
console.log(ctx.message?.text);
});
Here, the `ctx` parameter has an long and strange type that gives me lots of props accessible.
Now, I want to change it to have a handler function without using the type `AnStrangeType`:
async function handleMessage(ctx: AnStrangeType): Promise<void> {
console.log(ctx.message?.text);
}
bot.on(message("text"), handleMessage);
is there any way to have something like type inheritance for the arguments of the handler function?
</details>
# 答案1
**得分**: 1
```ts
import { Telegraf } from "telegraf";
const bot = new Telegraf(process.env.BOT_TOKEN || "");
bot.on('message', async (ctx) => {
console.log(ctx.message?.text);
});
// 选取所需的通用调用。
// 这里可能需要 `<typeof message("text")>` 的通用类型,我不知道 `message` 函数是什么
type call = typeof bot.on<'message'>
// 第二个参数是你要找的函数
type arg = Parameters<call>[1]
// 创建该类型的变量
const handleMessage: arg = async (ctx) => {
console.log(ctx.message?.text);
}
英文:
import { Telegraf } from "telegraf";
const bot = new Telegraf(process.env.BOT_TOKEN || "");
bot.on('message', async (ctx) => {
console.log(ctx.message?.text);
});
// pick the selected generic call.
// You may need `<typeof message("text")>` generic here, I dunno what's `message` function
type call = typeof bot.on<'message'>
// 2nd arg is the function you are looking for
type arg = Parameters<call>[1]
// make a variable of that type
const handleMessage: arg = async (ctx) => {
console.log(ctx.message?.text);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论