stories ファイルに .tsx を含める
.storybook/main.js
のstories
を['../src/**/*.stories.tsx']
のように変更し、 TypeScript なストーリーファイルを Storybook が見るようにします。
Webpack 編集
Storybook の Webpack はデフォルトでは TypeScript をサポートしていません。stories
を変えただけではうまくそれらを扱えません。
それらを扱えるようにts-loaderを導入します。また、まだ TypeScript がインストールされてないならそれも入れます。
yarn add -D ts-loader typescript
そして.storybook/main.js
を再度編集します。stories
と同じ階層にはwebpackFinal
というセクションが置け、ここで Webpack を弄れます。
このセクションは関数で、引数として Storybook が構築した Webpack Config を渡してくるので、そこに対して TypeScript 関連の設定を追加します。設定後は関数の戻り値としてその Config を返さなければなりません。
TypeScript 関連の設定は以下のように行います。
module.exports = {
stories: /* ...略... */,
webpackFinal(config) {
config.module.rules.push({
test: /\.tsx?$/,
use: [
{
loader: require.resolve('ts-loader'),
options: {
transpileOnly: true
}
}
]
})
config.resolve.extensions.push('.ts', '.tsx');
return config;
}
};
ここで行ってることは2つです。
.ts
または.tsx
ファイルをts-loader
を通してトランスパイルする.ts
または.tsx
ファイルは拡張子を省略してインポートできる
React 時の設定
もし React と一緒に使いたい場合は、以下のようになる TypeScript の設定が必要です。
JSX を使い
要素の生成関数には
React.createElement
を使う
これにはcompilerOptions.jsx
の値にreact
を設定します。
また作ってるものがライブラリの場合はcompilerOptions.esModuleInterop
もfalse
にしておくとトランスパイル後のコードが減ります。このオプションのオン・オフの違いはimport React
かimport * as React
で読み込むか位の違いです。
React 時のプロジェクト例について置いておきます。