TIL_210412


きょう習った

  • TypeScript
  • 隠匿化の限界
  • の抽象機能を持たない
  • TypeScript


    概要


    JavaScriptの親互換言語(マイクロソフトで実現)
    拡張子は.ts(無条件ではない)を使用してjsコードをコンパイルの結果として出力します.
    最終的には、実行時にこのような出力のjsコードが駆動されます.

    特長


    静的タイプを明確にすることができます.
    開発者は,予想される変数や関数の目的をIDEやコンパイラに明確に伝えることができるため,これらの情報に基づいてコードの自動完了をサポートしたり,誤った変数や関数の使用を誤って報告したりすることができ,バニラJSに比べて生産性を大幅に向上させることができる.
    また、apiを実装および使用する場合、そのapiのI/Oが何であるかを明確にすることができるため、apiを使用する場合にマニュアルを参照したりコードを開いたりする必要があるjsよりも効率的である.

    隠匿化の限界


    タイプスクリプトには、クラス内でのみ使用される属性とメソッドを区別するキーワードHE privateが用意されていますが、このような非表示を支援する機能はJavaScriptでは使用されません.
    JAvascriptのすべてのクラスでの方法はpublicです.private(外部からアクセスできない)のキーワードや機能が区別されていないため、一部の開発者は、underbarのようなprefixを貼り付けるレベルに分けています.
    しかし,すべてプロトタイプチェーンに曝されるため,安全性からも機能からも完全な意味でのprivateとは考えにくい.
    従って、最近ではprivate methodおよびprivate propertyが導入されており、mdnでも見つかるが、mdnのブラウザサポートの場合、多くのブラウザがサポートしていないため、実際にこの機能を使用することは難しい.
    これらの限界のため、symbolとWeakMapを使用して非表示を試みることができます.現在、TypeScriptの登場により、多くのJavaScript開発者がタイプスクリプトに移行し、private機能を使用しています.

    抽象機能なし


    オブジェクト向けプログラミングの主な特徴の1つは抽象であり,属性とメソッドの名前のみを露出し,使用を簡略化することを意味する.
    ただし、JavaScriptには存在しない機能です.
    (タイプスクリプトはすでに主な機能として実現されており、これはバニラJavaScriptのレベルに相当する)
    TypeScript抽象例
    interface ClockInterface {
      currentTime: Date;
      setTime(d: Date): void;
    }
    // TS에서는 interface 키위드가 추상화를 가능하게 한다.
    class Clock implements ClockInterface {
      currentTime: Date = new Date();
      setTime(d: Date) {
        this.currentTime = d;
      }
      constructor(h: number, m: number) {}
    }
    インタフェースとクラスが個別に定義されていることがわかります.
    タイプスクリプトでは、インタフェースはクラス実装者としてインタフェースを記述するのに役立つ約束と見なされます.(インタフェースは複数実装可能)
    したがって,クラスを使用する立場では,露出したインタフェースにより클래스 -> 메소드 이름이 의도한 바 대로 작동と明確に表される.
    また、これは、実際の実装コードを開示することなく、使用方法を開示するのに有利である.