Closed MofuMofu2 closed 2 years ago
package.jsonの意味
main: JavaScriptのエントリーポイント。ここを初めに読み込む。 https://docs.npmjs.com/cli/v7/configuring-npm/package-json#main
type: modules => モジュールimport/export
として読み込む
type: scripts => JavaScriptとして読み込む。import/export
は利用不可 ※エラーとなる
プロを目指す人のためのTypeScript入門 7 コラム34
tsc利用のためTypeScriptをインストール
--save-dev
はビルド・開発時に必要なパッケージとしてインストールする。
$ npm install --save-dev typescript @types/node
npm WARN idealTree Removing dependencies.typescript in favor of devDependencies.typescript
changed 1 package, and audited 338 packages in 4s
38 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
テキトーに設定したのでやり直す
npxで(node_modules内の)ライブラリのコマンドを起動する
$ npx tsc --init
Created a new tsconfig.json with:
TS
target: es2016
module: commonjs
strict: true
esModuleInterop: true
skipLibCheck: true
forceConsistentCasingInFileNames: true
You can learn more at https://aka.ms/tsconfig
JavaScript Support
セクションの対象行を変更する。allowJs
でJavaScriptを許可し、checkJs
で型をチェックする。
/* JavaScript Support */
"allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
"checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
Node.jsの対応表を参考にTypeScript → JavaScriptを可能な限り最新版にする https://node.green/
mofumofu at mofunoMacBook-Air in ~/git/silly-story-generator (feature/6-transpile-typescript)
$ node -v
v18.4.0
ES2016 → ES2022に変更
/* Language and Environment */
"target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
古いバージョンのNode.jsはmodule: commonjs
しかだめだった。※requireで呼び出す仕組み。
それをesnext
にするとトランスパイルは必要という形になる。
/* Modules */
"module": "esnext", /* Specify what module code is generated. */
JavaScriptでtscを通してみる
JavaScriptファイルなのでallowJs
オプションは?と聞かれた。
allowJs: true
にはしている 🤔
mofumofu at mofunoMacBook-Air in ~/git/silly-story-generator (feature/6-transpile-typescript)
$ npx tsc src/main.js
error TS6504: File 'src/main.js' is a JavaScript file. Did you mean to enable the 'allowJs' option?
The file is in the program because:
Root file specified for compilation
Found 1 error.
似たような事例がないか TS6504
で検索してみる。
https://stackoverflow.com/questions/60478889/running-tsc-command-does-nothing-ignores-tsconfig-file
When input files are specified on the command line, tsconfig.json files are ignored.
つまりファイル指定するとtsconfig.jsonが無視される https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
mofumofu at mofunoMacBook-Air in ~/git/silly-story-generator (feature/6-transpile-typescript)
$ npx tsc
src/main.js:5:31 - error TS7006: Parameter 'array' implicitly has an 'any' type.
5 function randomValueFromArray(array) {
~~~~~
src/main.js:20:1 - error TS2531: Object is possibly 'null'.
20 randomize.addEventListener('click', result);
~~~~~~~~~
src/main.js:33:6 - error TS2531: Object is possibly 'null'.
33 if(customName.value !== '') {
~~~~~~~~~~
src/main.js:33:17 - error TS2339: Property 'value' does not exist on type 'HTMLElement'.
33 if(customName.value !== '') {
~~~~~
src/main.js:34:18 - error TS2531: Object is possibly 'null'.
34 const name = customName.value;
~~~~~~~~~~
src/main.js:34:29 - error TS2339: Property 'value' does not exist on type 'HTMLElement'.
34 const name = customName.value;
~~~~~
src/main.js:38:6 - error TS2531: Object is possibly 'null'.
38 if(document.getElementById("uk").checked) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.js:38:36 - error TS2339: Property 'checked' does not exist on type 'HTMLElement'.
38 if(document.getElementById("uk").checked) {
~~~~~~~
src/main.js:46:3 - error TS2531: Object is possibly 'null'.
46 story.textContent = replaceZ;
~~~~~
src/main.js:47:3 - error TS2531: Object is possibly 'null'.
47 story.style.visibility = 'visible';
~~~~~
src/main.js:47:9 - error TS2339: Property 'style' does not exist on type 'Element'.
47 story.style.visibility = 'visible';
~~~~~
Found 11 errors in the same file, starting at: src/main.js:5
対象を指定するなら tsconfig
の内容をオプションの引数で渡し、そうでなければtsconfig
の"include"で対象を指定した方がよい。
TypeScriptにトランスパイルできないものか試す
トランスパイルではなく、ファイル名を .js
から .ts
に変更すればよい。
ビルドツールをセットアップしてコンパイルすれば良い。
もしエラーが出る場合、 noEmitOnError
を追加して無視もできる。
https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html#webpack
ts-migrateというライブラリでマイグレーションするという手もある https://qiita.com/itouoti/items/d9b88dbe3f563e457527
概要
3 のコードをTypeScriptに置き換えるため、
tsc
に通すとどうなるか試す。※JavaScriptのプロジェクトにTypeScriptを導入したい