型安全なテンプレートレンダリング
AccellaではページのレンダリングにAstroコンポーネントを利用します。 AstroコンポーネントはReactのJSXやVueのSFCのように、TypeScriptを利用して型安全なコンポーネントを記述することができます。
この型安全性は、他のサーバーサイド向けのテンプレートエンジン(JavaScript向けのEJSやPug、Ruby向けのERB、Python向けのJinja2など)を使うのと比較して、コードの品質向上に役立ちます。
コンポーネントの型チェック
存在しない変数やメソッドを参照すると、TypeScriptの型チェッカーがエラーを出してくれます。
---const name = "Accella";---<p>{name}</p>  <!-- <p>Accella</p> を出力 --><p>{foo}</p>  <!-- エラー: 'foo' という名前は見つかりません。 -->---interface User {  name: string;  greet(): string;}const user: User = {  name: "Alice",  greet() {    return `Hello, ${this.name}!`;  }}---<p>{user.name}</p>  <!-- <p>Alice</p> を出力 --><p>{user.foo}</p>  <!-- エラー: 'User' 型に 'foo' プロパティは存在しません。 -->
<p>{user.greet()}</p>  <!-- <p>Hello, Alice!</p> を出力 --><p>{user.bar()}</p>  <!-- エラー: 'User' 型に 'bar' プロパティは存在しません。 -->コンポーネントPropsの型
Astroコンポーネントには、ReactのJSXのようにPropsを渡すことができます。 Propsの型を指定することで、コンポーネントの利用側でPropsの型を間違えた場合にエラーを出すことができます。
---interface Props {  name: string;}const { name } = Astro.props;---<h1>Hello, {name}!</h1>---import Hello from "src/components/Hello.astro";---<Hello name="Alice" />  <!-- <h1>Hello, Alice!</h1> を出力 --><Hello name={123} />  <!-- エラー: 'number' 型は 'string' 型に割り当てられません。 --><Hello foo="Alice" />  <!-- エラー: '{ foo: string; }' 型は 'Props' 型に割り当てられません。 -->関連リンク
- Astroの構文(Astro Docs)
- コンポーネントのprops(Astro Docs)