JavaScriptのalt言語を入れてHelloWorldしてみる。
成果物
前提
手順
sudo npm install -g typescript
バージョン確認
tsc -v
Version 4.6.3
ヘルプ確認
tsc -h
ヘルプ内容
tsc: The TypeScript Compiler - Version 4.6.3                                                                            
                                                                                                                     TS 
COMMON COMMANDS
  tsc
  Compiles the current project (tsconfig.json in the working directory.)
  tsc app.ts util.ts
  Ignoring tsconfig.json, compiles the specified files with default compiler options.
  tsc -b
  Build a composite project in the working directory.
  tsc --init
  Creates a tsconfig.json with the recommended settings in the working directory.
  tsc -p ./path/to/tsconfig.json
  Compiles the TypeScript project located at the specified path.
  tsc --help --all
  An expanded version of this information, showing all possible compiler options
  tsc --noEmit
  tsc --target esnext
  Compiles the current project, with additional settings.
COMMAND LINE FLAGS
     --help, -h  Print this message.
    --watch, -w  Watch input files.
          --all  Show all compiler options.
  --version, -v  Print the compiler's version.
         --init  Initializes a TypeScript project and creates a tsconfig.json file.
  --project, -p  Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'.
    --build, -b  Build one or more projects and their dependencies, if out of date
   --showConfig  Print the final configuration instead of building.
COMMON COMPILER OPTIONS
               --pretty  Enable color and formatting in TypeScript's output to make compiler errors easier to read
                  type:  boolean
               default:  true
           --target, -t  Set the JavaScript language version for emitted JavaScript and include compatible library declarations.
                one of:  es3, es5, es6/es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext
               default:  es3
           --module, -m  Specify what module code is generated.
                one of:  none, commonjs, amd, umd, system, es6/es2015, es2020, es2022, esnext, node12, nodenext
               default:  undefined
                  --lib  Specify a set of bundled library declaration files that describe the target runtime environment.
           one or more:  es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, esnext, dom, dom.iterable, webwork                         er, webworker.importscripts, webworker.iterable, scripthost, es2015.core, es2015.collection, es2015.generator,                          es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.a                         rray.include, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncg                         enerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array,                          es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2020.bigint/esnext.bigint, es2020.promise, es2020.                         sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2021.promise/esnext.promise, es2021.string                         , es2021.weakref/esnext.weakref, es2021.intl, es2022.array/esnext.array, es2022.error, es2022.object, es2022.st                         ring/esnext.string, esnext.intl
               default:  undefined
              --allowJs  Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files.
                  type:  boolean
               default:  false
              --checkJs  Enable error reporting in type-checked JavaScript files.
                  type:  boolean
               default:  false
                  --jsx  Specify what JSX code is generated.
                one of:  preserve, react, react-native, react-jsx, react-jsxdev
               default:  undefined
      --declaration, -d  Generate .d.ts files from TypeScript and JavaScript files in your project.
                  type:  boolean
               default:  `false`, unless `composite` is set
       --declarationMap  Create sourcemaps for d.ts files.
                  type:  boolean
               default:  false
  --emitDeclarationOnly  Only output d.ts files and not JavaScript files.
                  type:  boolean
               default:  false
            --sourceMap  Create source map files for emitted JavaScript files.
                  type:  boolean
               default:  false
              --outFile  Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a f                         ile that bundles all .d.ts output.
               --outDir  Specify an output folder for all emitted files.
       --removeComments  Disable emitting comments.
                  type:  boolean
               default:  false
               --noEmit  Disable emitting files from a compilation.
                  type:  boolean
               default:  false
               --strict  Enable all strict type-checking options.
                  type:  boolean
               default:  false
                --types  Specify type package names to be included without being referenced in a source file.
      --esModuleInterop  Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultI                         mports` for type compatibility.
                  type:  boolean
               default:  false
You can learn about all of the compiler options at https://aka.ms/tsconfig-reference
ソースコードを書く
hello-ng.ts
function increment(num: number) { return num + 1; } console.log(increment("999"));
 関数定義の引数にnum: numberとある。これは変数名: 型である。引数numをnumber(数値)型に指定している。なのに呼出元では文字列"999"が渡されている。なのでビルドするとエラーになるはず。
JavaScriptは型の宣言ができないため、自動で型変換されるか実行時エラーになる。バグが生じやすいため、静的型チェックをしてくれる言語のほうがテストの手間なども減ってコードの品質が手間なく向上する。なのでTypeScriptで書いたほうがよい。
ビルドする
tsc hello-ng.ts
hello-ng.ts:5:23 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. 5 console.log(increment("999")); ~~~~~ Found 1 error in hello.ts:5
OK。英語だけど意図したとおりのエラーが出ている。
修正してビルドする
念のため、エラーがないコードもやる。
hello-ok.ts
function increment(num: number) { return num + 1; } console.log(increment(999));
tsc hello-ok.ts
エラーなく正常終了した。以下ファイルが出力された。
hello-ok.js
function increment(num) { return num + 1; } console.log(increment(999));
OK!
所感
とりあえずビルドから出力確認まで最低限はできた。次はAssemblyScriptをやってみよう。
情報源
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Node.js 16.14.2
- npm 8.5.0
$ uname -a Linux raspberrypi 5.10.63-v7l+ #1496 SMP Wed Dec 1 15:58:56 GMT 2021 armv7l GNU/Linux