TypeScriptのメモ

作成:
heroimage

どうでもいい前書き

そもそもプログラマーでもなんでもないので TypeScript だとか知らないのである

ここ2,3年は Discord bot のために python 触ったくらいである

C や C#で遊んでいたのは遠い日の過去である

ググりにググった記録である

配列を json 文字列にする

---
// array配列
JSON.stringify(array);

TypeScript で json ファイルを読み込む

tsconfig.json に以下のように追記する

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@components/*": [
        "src/components/*"
      ],
      "@layouts/*": [
        "src/layouts/*"
      ],
      "@styles/*": [
        "src/styles/*"
      ]
    },
    "strict": true,
+    "moduleResolution": "node",
+    "resolveJsonModule": true
  },
  "extends": "astro/tsconfigs/strict"
}

あとは普通に import できる

---
import DoujinItems from "../data/doujin.json";

配列の map の return 省略

そもそも javascript をまったくわかっていないのだからいろいろやりようがなかったので map とアロー演算子 (=>) を調べた。

return があったりなかったりすることがあったので調べたら以下の ようなことだった。

---
// returnを省略しない
<ul class="tags">
  {
    tags.map((tag: string) => {
      return (
        <li class="tag">
          <a href={`/tags/${tag}`}>{tag}</a>
        </li>
      );
    })
  }
</ul>

// returnを省略
<ul class="tags">
  {
    tags.map((tag: string) => (
      <li class="tag">
        <a href={`/tags/${tag}`}>{tag}</a>
      </li>
    ))
  }
</ul>

TypeScript で import するとき

tsconfig.json で path を指定しておけば 以下のようにディレクトリ位置を気にせずにインポートできる。

---
// 以下は例です
// @components = パス名
// Tag.astro パッケージ名

import "@components/Tag.astro";

以下は Astro の tsconfig.js

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@components/*": ["src/components/*"],
      "@layouts/*": ["src/layouts/*"],
      "@styles/*": ["src/styles/*"]
    },
    "strict": true
  },
  "extends": "astro/tsconfigs/strict"
}