ASK SDK(TypeScript)で任意の型のRequestオブジェクトを取得する
Pull Requestがマージ・リリースされたので簡単に紹介します。 Requirement [email protected] or later TypeScript 背景 ASK SDKでは、handlerInput.re […]
目次
Pull Requestがマージ・リリースされたので簡単に紹介します。
Requirement
- [email protected] or later
- TypeScript
背景
ASK SDKでは、handlerInput.requestEnvelope.request
にインテント名やスロットといったスキルからのリクエスト内容が入ります。
が、このオブジェクトはUNION型で全てのリクエストタイプが指定されており、IntentRequestでスロットを取りたい時など、特定のリクエストにしかないプロパティを取得するにはキャストしてやる必要がありました。
GitHubでもMissing typescript definitions? #398というIssueが上がっており、「キャストしないとTypeScriptでエラーになる」ということに気づかないと、任意のRequestのプロパティを取得できなくなるという問題が出ていました。
ASK [email protected]で追加されたgetRequest
若干身もふたもないのですが、このキャストをGenericsでやる関数としてgetRequest
がversion2.8.0から追加されました。
// For Intent request
const request = getRequest<IntentRequest>(handlerInput.requestEnvelope)
const state = request.dialogState
// For AudioPlayer intent request
const req = getRequest<interfaces.audioplayer.PlaybackFinishedRequest>(intentRequestEnvelope)
const sec = req.offsetInMilliseconds
canHandleでリクエストの選別が終わっている前提での利用になりますので、複数のRequestを受け付けているHandlerで使用すると予想外の動きがでることに注意してください。
「as
がGenericsに変わっただけ」といえばそれだけなのですが、あまりas
を使いたくない派としてはgetRequest
を積極的に使っていきたいなと思います。
PR出しておいて使わないのは流石に失礼かなとも思いますし・・・