TypeScript
CiteGraph は TypeScript で書かれたアプリにも対応していて、型の安全性をすぐに使えます。
基本的な使い方
デフォルトでは、CiteGraph は key
から fetcher
の引数の型を推測します。そのため、適切な型を自動的に設定できます。
useCiteGraph
// `key` は `string` に推測されます。
useCiteGraph('/api/user', key => {})
useCiteGraph(() => '/api/user', key => {})
// `key` は { a: string; b: { c: string; d: number } } として推測されます。
useCiteGraph({ a: '1', b: { c: '3', d: 2 } }, key => {})
useCiteGraph(() => ({ a: '1', b: { c: '3', d: 2 } }), key => {})
// `arg0` は文字列として推測されます。 `arg1` は数値として推測されます。
useCiteGraph(['user', 8], ([arg0, arg1]) => {})
useCiteGraph(() => ['user', 8], ([arg0, arg1]) => {})
key
と fetcher
の引数の型を明示的に指定することもできます。
import useCiteGraph, { Fetcher } from 'citegraph'
const uid = '<user_id>'
const fetcher: Fetcher<User, string> = (id) => getUserById(id)
const { data } = useCiteGraph(uid, fetcher)
// `data` は `User | undefined` となります。
同様に、デフォルトでは、fetcher
関数内で投げられる エラー の型は any
ですが、型を明示的に指定することができます。
const { data, error } = useCiteGraph<User, Error>(uid, fetcher);
// `data` は `User | undefined` となります.
// `error` は `Error | undefined` となります.
useCiteGraphInfinite
citegraph/infinite
の場合と同じように、型推論に頼るか、自分で明示的に型を指定することができます。
import { CiteGraphInfiniteKeyLoader } from 'citegraph/infinite'
const getKey: CiteGraphInfiniteKeyLoader = (index, previousPageData) => {
// ...
}
const { data } = useCiteGraphInfinite(getKey, fetcher)
useCiteGraphSubscription
- Inline subscribe function and mamually specify the type of
next
usingCiteGraphSubscriptionOptions
.
import useCiteGraphSubscription from 'citegraph/subscription'
import type { CiteGraphSubscriptionOptions } from 'citegraph/subscription'
const { data, error } = useCiteGraphSubscription('key',
(key, { next }: CiteGraphSubscriptionOptions<number, Error>) => {
//^ key will be inferred as `string`
//....
})
return {
data,
//^ data will be inferred as `number | undefined`
error
//^ error will be inferred as `Error | undefined`
}
}
- declare subscribe function using
CiteGraphSubscription
import useCiteGraphSubscription from 'citegraph/subscription'
import type { CiteGraphSubscription } from 'citegraph/subscription'
/**
* The first generic is Key
* The second generic is Data
* The Third generic is Error
*/
const sub: CiteGraphSubscription<string, number, Error> = (key, { next }) => {
//......
}
const { data, error } = useCiteGraphSubscription('key', sub)
ジェネリクス
data
の型定義は簡単です。デフォルトでは、fetcher
の戻り値の型(準備ができていない場合は undefined
)を data
の型として使用しますが、パラメーターとして渡すこともできます:
// 🔹 A. 型付きの fetcher を使う:
// `getUser` は `(endpoint: string) => User` になります。
const { data } = useCiteGraph('/api/user', getUser)
// 🔹 B. データ型を指定:
// `fetcher` は 通常 `any` を返します。
const { data } = useCiteGraph<User>('/api/user', fetcher)
CiteGraph オプションの型を追加したい場合は、これらの型を直接インポートすることもできます:
import useCiteGraph from 'citegraph'
import type { CiteGraphConfiguration } from 'citegraph'
const config: CiteGraphConfiguration = {
fallbackData: "fallback",
revalidateOnMount: false
// ...
}
const { data } = useCiteGraph<string[]>('/api/data', fetcher, config)
ミドルウェアの型
カスタムミドルウェアに型を追加するのに役立つ、インポート可能な追加の型定義がいくつかあります。
import useCiteGraph, { Middleware, CiteGraphHook } from 'citegraph'
const citegraphMiddleware: Middleware = (useCiteGraphNext: CiteGraphHook) => (key, fetcher, config) => {
// ...
return useCiteGraphNext(key, fetcher, config)
}