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
というプロパティに設定されて返却されますが、attributes
はany
型のため、静的にチェックされません。
例えば、以下のようなコードはコンパイルが通ってしまいます。
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型のプロパティのため、静的に解決される
}