svelte - SvelteKit Hooks'taki Handle Fonksiyonuna TypeScript'i Nasıl Eklerim?


Şu anda bir SvelteKit uygulamasında hooks.ts dosyamda aşağıdakileri kullanıyorum:

export async function handle({ event, resolve }) {
  console.log(event.locals) //<-- Works fine
}

Type parametrelerini event ve resolve üzerinde nasıl kullanacağımı anlamaya çalışıyorum. Anladığım kadarıyla, event şu şekilde çalışıyor:

import type { RequestEvent } from '@sveltejs/kit'

export async function handle(event: RequestEvent, resolve: ???){
  ...
}

Ama resolve parametresini nasıl yazacağımı çözemedim. Buradaki belgeler bunu gösteriyor:

interface Handle {
  (input: {
    event: RequestEvent;
    resolve(
      event: RequestEvent,
      opts?: ResolveOptions
    ): MaybePromise<Response>;
  }): MaybePromise<Response>;
}

Sınırlı TypeScript bilgimden, resolve işlevinin iki parametre alan ve bir söz (promise) döndüren bir işlev gibi göründüğünü düşünüyorum. Ama bunu handle işlev bildirgesinde nasıl yazabilirim?

Cevap #1

Bence senin sorunun (veya olması gereken 😁): "TypeScript'e fonksiyonumun Handle türünde olduğunu nasıl söylerim?".

Bence en basit yol, fonksiyondan bir değişken oluşturmak olur, böylece onu kolayca yazabilirsiniz.

export const handle: Handle = async function ({ event, resolve }) {
  console.log(event.locals);
}

Dikkat edin, event veya resolve öğelerini ayrı ayrı yazmanıza gerek yok, TS zaten fonksiyonunuzun argümanını ve dönüş türünü biliyor. Mevcut uygulamanızı işaretleyecektir çünkü bir MaybePromise<Response> döndürmüyor.

İlgili makaleler