質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

920閲覧

Lineサンプルコードをtypescriptに置き換えるとエラーが出てしまいます。

Arata0608

総合スコア7

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2020/10/15 07:17

前提・実現したいこと

Line bottypescriptを用いて開発しています。
ひとまず公式サイトに載っているサンプルを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"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

types.ts より、TextMessageの型は以下です。

typescript

1export type TextMessage = MessageCommon & { 2 type: "text"; 3 text: string; 4}; 5export type MessageCommon = { 6 quickReply?: QuickReply; 7 sender?: Sender; 8};

echoの型が未指定なので、{type:string,text:string}と解釈されてしまっています。
(ただしくは{type:"text",text:string}型)
TextMessage型を明示したら直りませんか?

diff

1- let echo = { 2+ let echo: TextMessage = { 3 type: 'text', 4 text: event.message.text 5 };

投稿2020/10/15 08:03

Hogeike

総合スコア293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Arata0608

2020/10/15 08:59

解決致しました! TypeScript初心者なので非常に助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問