fontcolor_theme
Deepkit Runtime Types

はじめに

Deepkit のランタイム型システムをインストールするには、Deepkit Type Compiler と Deepkit Type パッケージ本体という 2 つのパッケージが必要です。Type Compiler は、TypeScript の型からランタイム型情報を生成する TypeScript のトランスフォーマーです。Type パッケージには、ランタイム仮想マシンや型アノテーションに加えて、型を扱うための多くの便利な関数が含まれます。

インストール

npm install --save @deepkit/type
npm install --save-dev @deepkit/type-compiler typescript ts-node

ランタイム型情報はデフォルトでは生成されません。有効化するには、tsconfig.json ファイルで "reflection": true を設定する必要があります。

デコレーターを使用する場合は、tsconfig.json"experimentalDecorators": true を有効にする必要があります。これは @deepkit/type を使うために厳密には必須ではありませんが、他の Deepkit ライブラリや Deepkit Framework の特定の機能では必要です。

ファイル: tsconfig.json

{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "es6",
    "moduleResolution": "node",
    "experimentalDecorators": true
  },
  "reflection": true
}

ランタイム型情報を使った最初のコードを書いてみましょう:

ファイル: app.ts

import { cast, MinLength, ReflectionClass } from '@deepkit/type';

interface User {
    username: string & MinLength<3>;
    birthDate?: Date;
}

const user = cast<User>({
    username: 'Peter',
    birthDate: '2010-10-10T00:00:00Z'
});
console.log(user);

const reflection = ReflectionClass.from<User>();
console.log(reflection.getProperty('username').type);

そして ts-node で実行します:

./node_modules/.bin/ts-node app.ts

インタラクティブな例

こちらに CodeSandbox の例があります: https://codesandbox.io/p/sandbox/deepkit-runtime-types-fjmc2f?file=index.ts

型コンパイラ

TypeScript 自体は、tsconfig.json を通じて型コンパイラを構成することを許可していません。そのため、TypeScript Compiler API を直接使用するか、ts-loader を備えた Webpack のようなビルドシステムを使う必要があります。Deepkit の利用者がこの不便さを回避できるよう、@deepkit/type-compiler をインストールすると、Deepkit の型コンパイラは自動的に node_modules/typescript に自身をインストールします(これは NPM のインストールフックによって行われます)。 これにより、ローカルにインストールされた TypeScript(node_modules/typescript 内のもの)にアクセスするすべてのビルドツールで、型コンパイラが自動的に有効になります。これによって、tsc、Angular、webpack、ts-node などのツールが、Deepkit の型コンパイラと自動的に連携して動作します。

型コンパイラが自動的に正しくインストールされなかった場合(たとえば NPM のインストールフックが無効化されている場合)、次のコマンドで手動インストールできます:

node_modules/.bin/deepkit-type-install

ローカルの TypeScript のバージョンが更新された場合(たとえば、package.json の typescript のバージョンが変更されて npm install を実行した場合など)は、deepkit-type-install を実行する必要がある点に注意してください。

Webpack

webpack ビルドで型コンパイラを使用したい場合は、ts-loader パッケージ(またはトランスフォーマー登録をサポートする他の TypeScript ローダー)で設定できます。

ファイル: webpack.config.js

const typeCompiler = require('@deepkit/type-compiler');

module.exports = {
  entry: './app.ts',
  module: {
    rules: [
      {
        test: /\.tsx?$/,
          use: {
            loader: 'ts-loader',
            options: {
              // これは @deepkit/type の型コンパイラを有効にします
              getCustomTransformers: (program, getProgram) => ({
                before: [typeCompiler.transformer],
                afterDeclarations: [typeCompiler.declarationTransformer],
              }),
            }
          },
          exclude: /node_modules/,
       },
    ],
  },
}
English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)