Externe Types
Externe Classes
Da TypeScript standardmäßig keine Type-Informationen enthält, haben importierte Types/Classes aus anderen Paketen (die @deepkit/type-compiler nicht verwendet haben) keine Type-Informationen verfügbar.
Um Types für eine externe Class zu annotieren, verwende annotateClass
und stelle sicher, dass diese Function in der Bootstrap-Phase deiner Anwendung ausgeführt wird, bevor die importierte Class anderswo verwendet wird.
import { MyExternalClass } from 'external-package'; import { annotateClass } from '@deepkit/type'; interface AnnotatedClass { id: number; title: string; } annotateClass<AnnotatedClass>(MyExternalClass); //alle Verwendungen von MyExternalClass liefern nun den Type von AnnotatedClass zurück serialize<MyExternalClass>({...}); //MyExternalClass kann nun auch in anderen Types verwendet werden interface User { id: number; clazz: MyExternalClass; }
MyExternalClass
kann nun in Serialisierungsfunktionen und in der Reflection-API verwendet werden.
Das Folgende zeigt, wie man generische Classes annotiert:
import { MyExternalClass } from 'external-package'; import { annotateClass } from '@deepkit/type'; class AnnotatedClass<T> { id!: T; } annotateClass(ExternalClass, AnnotatedClass);
Import Type
Die Syntax import type
wurde von TypeScript entwickelt, um zu vermeiden, dass tatsächlicher JavaScript-Code importiert wird, und ihn nur für Type-Checking zu verwenden. Das ist z. B. dann nützlich, wenn du einen Type aus einem Package verwenden möchtest, der zur Runtime nicht verfügbar ist, sondern nur zur Compile-Time, oder wenn du dieses Package zur Runtime nicht wirklich laden möchtest.
Deepkit unterstützt das Konzept von import type
und generiert keinen Runtime-Code. Das bedeutet, wenn du import type
verwendest, sind zur Runtime keine Type-Informationen verfügbar.