TypeScriptのサポート

BaaS@rakuza SDK for JavaScript、BaaS@rakuza Admin SDK for Node.jsにはTypeScriptの型定義ファイル(.d.ts)が含まれており、標準でTypeScriptから使用することができます。

使用例

例えば、オブジェクトデータを1件取得した場合、Data型で返却されます。

const shop = await RKZ.Data.get('shop', '0001')
console.debug('name:', shop.name) // Data型のプロパティのため、静的に解決される
console.debug('invalid_property:', shop.invalid_property) // 存在しないプロパティのため、コンパイルエラー

関数の戻り値などで型を宣言したい場合は、import typeで型をインポートしてください。

import type { Data } from 'baasatrakuza'

function getShop(): Promise<Data> {
  return RKZ.Data.get('shop', '0001')
}

ヒント

その他の使用可能な型は、APIリファレンスを参照してください。

attributesの型定義

アプリケーションで独自に追加した項目はattributesというプロパティに設定されて返却されますが、attributesany型のため、静的にチェックされません。

例えば、以下のようなコードはコンパイルが通ってしまいます。

const shop = await RKZ.Data.get('shop', '0001')
console.debug('invalid_property:', shop.attributes.invalid_property) // any型のため、コンパイルエラーにならない

attributesを静的に解決するには、以下のようにData型を継承した型を作成して、attributesのプロパティを定義します。(プロパティはすべてstring型にする必要があります)

interface Shop extends Data {
  // アプリケーション独自の項目
  attributes: {
    category_cd: string
    category_cd_name: string
    image: string
    image_url: string
    spot_cd: string
    spot_cd_name: string
  }
}

そして、作成した型で宣言した変数(または定数)に代入します。すると、attributesのプロパティを静的に解決できるようになります。

const shop: Shop = await RKZ.Data.get('shop', '0001')
console.debug('name:', shop.name)
console.debug('category_cd:', shop.attributes.category_cd) // Shop型のプロパティのため、静的に解決される
console.debug('invalid_property:', shop.attributes.invalid_property) // 存在しないプロパティのため、コンパイルエラー

オブジェクトデータを複数件を取得する場合は、DataResult型の型引数に作成した型を指定してください。

const result: DataResult<Shop> = await RKZ.Data.query('shop').find()
for (const shop of result.data) {
  console.debug('name:', shop.name)
  console.debug('category_cd:', shop.attributes.category_cd)
}

変数(または定数)に代入する以外に、関数の戻り値の型に作成した型を指定する方法もあります。

function getShops(): Promise<DataResult<Shop>> {
  return RKZ.Data.query('shop').find()
}

この方法はattributesを持つすべての型で使用することができます。例えば、以下はクーポンを複数件取得する使用例です。

interface AppCoupon extends Coupon {
  attributes: {
    description: string
  }
}

// ...

const coupons: AppCoupon[] = await RKZ.Coupon.query().find()
for (const coupon of coupons) {
  console.debug('description:', coupon.attributes.description) // AppCoupon型のプロパティのため、静的に解決される
}