前提・実現したいこと
Line botをtypescriptを用いて開発しています。
ひとまず公式サイトに載っているサンプルをtypescript化していたのですが、
サンプルコードで言うと42行目のechoにエラーが出てしまっています。
このエラーの原因が私一人では解明できなかったため、どなたか解決に協力してくださると幸いです。
問題となっているエラー文
error
1Argument of type '{ type: string; text: string; }' is not assignable to parameter of type 'TextMessage | ImageMessage | VideoMessage | AudioMessage | LocationMessage | StickerMessage | ImageMapMessage | TemplateMessage | FlexMessage | Message[]'. 2 Type '{ type: string; text: string; }' is not assignable to type 'TextMessage'. 3 Type '{ type: string; text: string; }' is not assignable to type '{ type: "text"; text: string; }'. 4 Types of property 'type' are incompatible. 5 Type 'string' is not assignable to type '"text"'.ts(2345)
試したこと
LineのMessage APIのソースコードを読み、問題となっているエラーにあるTextMessageのTypeを確認しましたが、Type通りに書いていましたので詰まってしまいました。
ソースコード
typescript
1import * as line from '@line/bot-sdk'; 2import express from 'express'; 3import * as dotenv from "dotenv"; 4import LineMessageEvent from "./model/line_message_event"; 5 6dotenv.config(); 7 8// create LINE SDK config from env variables 9const config = { 10 channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN || "", 11 channelSecret: process.env.CHANNEL_SECRET || "", 12}; 13 14// create LINE SDK client 15const client = new line.Client(config); 16 17const app = express(); 18 19// register a webhook handler with middleware 20// about the middleware, please refer to doc 21app.post('/callback', line.middleware(config), (req, res) => { 22 Promise 23 .all(req.body.events.map(handleEvent)) 24 .then(() => res.json({})) 25 .catch((err: Error) => { 26 res.status(500).end(); 27 }); 28}); 29 30// event handler 31const handleEvent = async (event: LineMessageEvent) => { 32 if (event.type !== 'message' || event.message.type !== 'text') { 33 // ignore non-text-message event 34 return null; 35 } 36 37 let echo = { 38 type: 'text', 39 text: event.message.text 40 }; 41 42 // use reply API 43 return client.replyMessage(event.replyToken, echo); 44} 45 46// listen on port 47const port = process.env.PORT || 3000; 48app.listen(port, () => { 49 console.log(`listening on ${port}`); 50});
利用環境
"@line/bot-sdk": "^7.1.0",
"@types/dotenv": "^8.2.0",
"@types/express": "^4.17.8",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"ts-node": "^9.0.0",
"typescript": "^4.0.3"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/15 08:59