intra-martはTypeScriptでも書けそう

2020年01月14日 00時01分

![](../assets/2020/02/intra-mart_and_TS.png)
intra-mart開発されてますか?

型推論がある TypeScript を入れたいですね…。

ES5 対応と同様にトランスコンパイルすればスクリプト開発のファンクションコンテナとして振舞えそうです。

フレームワーク対応

@ts-ignore…ではありませんでした。(1/17 追記)

アンビエント宣言、declare を使用することで外部パッケージをコンパイラーに教えることができます。

//foo.ts
function greeter(person) {
    return "Hello, " + person;
}

let user = "Jane User";

document.body.textContent = greeter(user);
// loadはファンクションコンテナ側の関数
declare function lead(path: string): void;
load('foo');
//コンパイル後foo.js
function greeter(person) {
    return "Hello, " + person;
}
var user = "Jane User";
document.body.textContent = greeter(user);
// loadはファンクションコンテナ側の関数
load('foo');

アンビエント宣言の一覧を作りたい

ここの API ドキュメント仕様の互換対応表の中に API リスト一覧が Excel 形式であります。(2020/01/17 確認)。

2020 01 17 06h30 04 こちらの ScpirtAPI と Cliant Side JavaScript に一覧があるので、マクロ等でパースして imart.d.ts に入れてあげましょう。

入れる利点

サーバーサイド側は型推論が一番大きいです。(一応イントラマート自体は Java でも書けるんです。)

メリットは下記の記事が分かりやすかったです。

TypeScript を使って嬉しかったこと

JavaScript を大規模開発(スケール)させるための言語なので、沢山メリットがあります。

静的型推論は、定義した型を保持しておいて、コンパイル時に指摘してくれる機能といえば伝わるかなーと。

string の user に数値を入れようとするとコンパイルエラーが起こります。(エディタ上でも指摘してくれます。

//foo.ts
let user = "Jane User";
user = 1; //コンパイルエラー

//errorlog
src/foo.ts:6:1 - error TS2322: Type '1' is not assignable to type 'string'.

6 user = 1;
  ~~~~


Found 1 error.

intra-mart でスクリプト開発を行う場合、DB 操作で型を指定することがあり、そこで曖昧な指定をしていると、型違反でエラーが起こってしまうので、どのみち型をしっかり定義しておいた方がいいですよねって状況が起こります。

実装時は厳密に取り扱いはするんですが、後から見た時にコードを全部見ないと型を追えないのはつらいので、ゆくゆくは TS でトランスコンパイルしてファンクションコンテナとして動くように…。

プラットフォーム上では、ts でファンクションコンテナを定義できるともっと嬉しいです…。