Using Types
Nuxt Kirby provides comprehensive TypeScript types for full type safety when working with Kirby CMS data and queries.
INFO
Types are re-exported from the kirby-types package and available globally in your Nuxt project via the #nuxt-kirby path alias.
ts
import type {
KirbyApiResponse,
KirbyBlock,
KirbyDefaultBlocks,
KirbyDefaultBlockType,
KirbyLayout,
KirbyLayoutColumn,
KirbyQuery,
KirbyQueryChain,
KirbyQueryModel,
KirbyQueryRequest,
KirbyQueryResponse,
KirbyQuerySchema,
} from '#nuxt-kirby'Typed Query Results
For the best TypeScript experience, define the expected result type of your queries to get full type safety and IDE support.
The KirbyQueryResponse accepts the generic type parameter T used for the query result type.
ts
// Extend the default response type with the result we expect from the query response
await useKql<KirbyQueryResponse<{ title: string }>>({
query: 'site',
select: ['title'],
})Example:
First, create an KirbySite interface that matches the expected structure of the query result.
Then, pass it as a generic type parameter to useKql. The data object will now be strongly typed, and your IDE will provide autocompletion and type checking.
vue
<script setup lang="ts">
import type { KirbyQueryResponse } from '#nuxt-kirby'
// Define the expected response structure
export interface KirbySite {
title: string
children: {
id: string
title: string
isListed: boolean
}[]
}
// `data` will be of type `KirbyQueryResponse<KirbySite>`
const { data } = await useKql<KirbyQueryResponse<KirbySite>>({
query: 'site',
select: {
title: true,
children: {
query: 'site.children',
select: {
id: true,
title: true,
isListed: true
}
}
}
})
</script>
<template>
<div>
<h1>{{ data?.result.title }}</h1>
</div>
</template>