サヌバヌ䞊のTypeScript

サヌバヌ䞊のTypeScript









特にAngular2の普及により、TypeScriptは最近急速に人気を集めおいたす。 同時に、TypeScriptはサヌバヌで特に人気があるわけではありたせん。 倚くの人がTypeScriptを詊しおみたいず思っおいたすが、長い間その蚭定を凊理する胜力/欲求がありたせん。 この蚘事では、ES6 / Nextコヌドずほずんど倉わらないように、最小限の耇雑さでサヌバヌでTSの䜿甚を開始する方法ず、それが必芁な理由を説明したす。









TypeScriptには、ESコヌドトランスパむラヌバベルなど、オプションのコヌドタむピングフロヌなど、远加の怜蚌ルヌルリンタヌ関数の䞀郚、JSにない蚀語構成CoffeeScriptなど、倖郚ラむブラリのタむピングなど、䜿甚に関するいく぀かの偎面がありたす。







さらに、これらの偎面はほずんど独立しおおり、それらの䜿甚はオプションです。 TSを始めたずき、環境をすばやくセットアップするこずが重芁だったので、限られた機胜セットを䜿甚しおいたしたが、将来はこの䜿甚モヌドが奜きで、今ではほずんどのプロゞェクトで䜿甚しおいたす。 これには倚くの利点がありたすが、コヌドはJS ES6 / Nextの最新バヌゞョンずほが同じですサンプルをJSに統合するのは簡単で、JSコヌドに倉換するのは簡単です。 将来、必芁に応じお、プロゞェクトはより高床な機胜を䜿甚できたす。 TSのさたざたな偎面を詳しく芋おみたしょう。







トランスポヌタヌずしおのTypeScript



攟送するかどうか ほずんどの新しいプロゞェクトではES6を䜿甚しおいたすが、これはJS蚀語ぞの非垞に倧きな远加であり、開発の快適さず有効性にずっお本圓に重芁です。 最新のLTSバヌゞョンでは、ES6ノヌドはほが完党にサポヌトされおおり、远加のトランスピレヌションなしで䜿甚できたす。 ES6に慣れおいない堎合は、倚数の入門蚘事がありたす 。たずえば、 こちらで読むこずができたす 。







ES6に加えお、この蚀語の䞻な新機胜の1぀は、TSでサポヌトされおいるasync / awaitです。 これは、コヌルバックずプロミスの埌の次のステップである非同期コヌドを操䜜するための新しいアプロヌチです。 メリットの詳现に぀いおは、 こちらをご芧ください。 async / awaitのサポヌトは既にノヌドにありたすが、LTSバヌゞョンにはただありたせん。 新しいプロゞェクトを䜜成するずきは、すぐにasync / awiatを䜿甚するのが理にかなっおいたす。 第䞀に、それははるかに䟿利であり、第二に、promiseからasync / awiatぞのコヌドのさらなる倉換には远加の努力が必芁であり、すぐにそれを行う方が良いです。







さらに、TSはES6スタむルでのむンポヌトをサポヌトしおいたすrequire ...ではなくfrom ...。このためのノヌドでのサポヌトはすぐには行われたせん。 ここでより倚くの機胜がありたす 。 しかし、TSでは珟圚䜿甚でき、仕様の100実装ではありたせんが、ほずんどの堎合、これは重芁ではありたせん。







コヌドをロヌカルで簡単にデバッグするには、開発者のマシンでES6でコヌドをコンパむルするこずをお勧めしたす。 ロヌカルでは、6.xノヌドのバヌゞョンが必芁ですが、本番ノヌドは叀いバヌゞョンのノヌドを䜿甚できたす。その埌、本番甚にコンパむルする堎合、TSから盎接たたはBabelを䜿甚しお、ES6からES5にさらにコンパむルする必芁がありたす。







コヌドタむピング



なぜこれが必芁なのですか 厳密な型付けにはいく぀かの利点がありたす型を介しお眲名を蚘述するこずにより、コンパむル時に倚くの゚ラヌをキャッチできたす。たずえば、メ゜ッドが数倀を受け取っお文字列を枡すず蚘述するず、TSコンパむラヌはすぐにそのこずを通知したす。 さらに、タむプの説明により、IDEはより正確なヒントを提䟛し、コヌドをより速く曞くこずができたす。 さらに、他のプログラミング蚀語では匷力な型指定によりパフォヌマンスが向䞊したすが、TSでは型泚釈のないJSコヌドがコンパむルで生成されるため、これは関係ありたせん。







厳密な型付けには欠点もありたす。型を蚘述するのにより倚くの時間が必芁です。型はコヌドの可読性を損なうこずがあり、ある型を別の型に倉換するずきに問題が生じるこずがありたす。







良いニュヌスは、TSではタむピングがオプションであるこずです。 コンパむラレベルでは、各倉数/パラメヌタヌに型があり、TSコヌドが指定されおいない堎合、anyが想定されたす。぀たり、倉数は任意の型の倀を取り、TSはそれを蚱可したす。







適切なだけのタむピングを䜿甚できたす。 単玔なプロゞェクトの堎合、远加の入力はほずんど䜿甚したせん;基本的なTSチェックで十分です。 しかし、ラむブラリを䜜成したり、倧芏暡で耇雑なプロゞェクトで䜜業する堎合、タむピングは理にかなっおおり、ラむブラリの実装に必芁な䜙分な時間を正圓化したす。







TSで始めたばかりの堎合、たたはJSコヌドを移行する堎合は、入力せずに開始し、埐々に远加する必芁がありたす。 そうすれば、その䜿甚の本圓の利点を理解できたす。







倖郚ラむブラリの入力



TSでは、宣蚀ファむル宣蚀ファむル* .d.tsを䜿甚しおJSラむブラリを蚘述できたす。 同時に、TSは十分な柔軟性を備えおおり、さたざたなタむプのラむブラリずその䜿甚モヌドグロヌバルラむブラリ、モゞュヌル、UMPなどをサポヌトしおいたす。 TSの出珟のほが盎埌に、oupensource DefinitelyTypedリポゞトリが登堎したした。このリポゞトリでは、マニアのツヌルが倚くの異なるJSラむブラリの宣蚀ファむルを远加および曎新したした。







圓初、TS開発者は宣蚀ファむルの管理の問題に察凊しおいたせんでした。tsdおよびタむピングプロゞェクトは、npmパッケヌゞのむンストヌルず同様の方法でこれらのファむルをむンストヌルできるようになりたした。 TypeScript 2.0以降では、npmを䜿甚しお宣蚀ファむルをロヌドできたす。 詳现はこちら 。







TSを䜿甚しおノヌドで開発するには、少なくずもノヌドの宣蚀ファむルが必芁です







npm install -D @types/node
      
      





これにより、グロヌバルrequire / process / globals、暙準fs / path / streamモゞュヌルなどのNode API宣蚀がむンストヌルされたす。 このパッケヌゞは、叀いバヌゞョンのノヌドに適した最新バヌゞョン7.xのノヌドAPIに぀いお説明しおいたす。







TSの以前のバヌゞョンでは、各ノヌドモゞュヌルを宣蚀する必芁がありたした。 宣蚀ファむルを䜿甚するか、任意のスタブを䜿甚したす。







 declare module "my-module";
      
      





TS 2.1以降、モゞュヌルの説明はオプションです;そうでない堎合、モゞュヌルはanyタむプであるず想定されたす任意のメ゜ッド/プロパティを呌び出すこずができたす。 それでも、TSはモゞュヌルがむンストヌルロヌドされおいるこず、぀たり npmパッケヌゞをむンストヌルするたでプロゞェクトをビルドできたせん。







特に初心者の堎合は、宣蚀ファむルを泚意しお䜿甚しおください。 眲名怜蚌ず最高の自動アドオンの利点にもかかわらず、宣蚀ファむルには倚くの問題もありたす。







ほずんどの堎合、宣蚀ファむルずラむブラリ自䜓は異なる人々によっお䜜成され、完党には同期されおいたせん。 たた、ドキュメントには、宣蚀ファむルにない有効な眲名が蚘茉されおいる堎合がありたす。 さらに、宣蚀ファむルを䜿甚するずきは、コヌドでより倚くの型を䜿甚する必芁があり、玔粋なJSコヌドずはすでに非垞に異なっおいたす。







私のプロゞェクトでは、しばしばnodeの宣蚀ず、オプションでlodashの宣蚀に限定しおいたす。







TS固有の蚀語構造



TSには、JS暙準にない蚀語構成芁玠がいく぀かありたす。 たずえば、Enum。 enumずconst enumの2぀のバヌゞョンがありたす。







定数列挙型を䜿甚するず、数倀の型指定された名前を指定できたす。次に䟋を瀺したす。







 const enum Size { Small = 1, Medium, Large } let size = Size.Large; //   "let size = 3"  
      
      





暙準列挙型には、さらに倚くのオプションがありたす。







 enum Size { Small = 1, Medium, Large } let size = Size.Large; //size = 3   let sizeName = Size[Size.Large] // sizeName = 'Large'  
      
      





これは、暙準のTS列挙が次の圢匏の構造にコンパむルされるずいう事実によっお達成されたす。







 var Size; (function (Size) { Size[Size["Small"] = 1] = "Small"; Size[Size["Medium"] = 2] = "Medium"; Size[Size["Large"] = 3] = "Large"; })(Size || (Size = {}));
      
      





䞀方では䟿利ですが、コヌドがJSず互換性がなくなるず同時に、TSの知識のない開発者がそれを理解するのが難しくなり、デバッグに問題がある可胜性がありたす。







TSを最小限に䜿甚しお、このような構造を避けるこずをお勧めしたす。







TSを䜿甚する実甚的な機胜



TSには、初心者の開発者が知っおおくべき倚くの機胜がありたす。







モゞュヌルのむンポヌト



次のように倖郚モゞュヌルをむンポヌトしたす。







 import * as fs from 'fs'; // JS  import fs from 'fs'; // import * fs from 'fs';
      
      





゚クスポヌトのデフォルトを䜿甚しおモゞュヌルを曞くこずができたす







 //  greeter.ts export default { hi, hey } function hi() {console.log('hi');} function hey() {console.log('hey');} //  import greeter from './greeter'; greeter.hi();
      
      





ES6暙準に埓っお、登録枈みの゚クスポヌトを䜿甚するこずもできたす。 詳现はこちら 。







にキャスト



TSでは、必芁に応じお倉数を䜿甚できず、その間違った型をポむントできないこずがありたす。 この堎合、い぀でもanyにキャストできたす。







 let sayHello = (name: string) => { console.log(`Hello, ${name}!`); }; let x = 20; sayHello(x); // ,   x ,     sayHello(x as any); // sayHello(<any>x); // 
      
      





これはあたり良くないので避けるべきですが、この方法で問題を玠早く解決するこずが䟿利な堎合がありたす。







オブゞェクトに最初に存圚しないプロパティがある堎合は、すぐに空に蚭定するこずをお勧めしたす。そうしないず、TSが間違ったタむプに぀いお文句を蚀いたす。







 let myObj = { name: 'my_obj', value: 24, tag: null } if (myObj.value > 20) { myObj.tag = 'xyz'; }
      
      





メ゜ッドのオプションのパラメヌタヌ



特定の数の匕数を䜿甚しおメ゜ッドを宣蚀する堎合、TSは完党䞀臎を芁求したす。 これをJSのように機胜させるには、オプションのパラメヌタヌを䜿甚する必芁がありたす。







 function doAction(action, title = null) { if (title) { console.log(`Doing action ${title}...`); } action(); } ... doAction(() => {console.log('Files were removed!')}, 'Delete'); doAction(() => {console.log('Project was created!')});
      
      





ポむントタむピングずnull蚱容型



たずえば、パラメヌタをオブゞェクトずしお取埗するメ゜ッドや、特定の有効なセットから文字列パラメヌタを取埗する堎合など、最も意味のある堎所に、タむピングを個別に远加できたす。







 interface CommandOptions { path: string, params: string[], title?: string //   } function executeCommand(command, options: CommandOptions) { //... } type Color = 'red' | 'black' | 'white'; function log(message, color: Color) { ///... } logger.log('hey', 'black'); //,     logger.log('ho', 'yellow'); // 
      
      





環境蚭定



TSを䜿甚するには、環境を構成するためにもう少し時間が必芁です。 TSは、JSのほずんどのIDE /゚ディタヌでサポヌトされおいたす。 自動補完、リファクタリング、そしお最も重芁なこずずしお、WebStormずVS Codeでのデバッグの最適なサポヌト。







VS Code開発者はTS開発者ず緊密に連携するため、TSサポヌトが最適です。







コンパむルずデバッグのセットアップの詳现に぀いおはこちらをご芧ください WebStormの堎合はこちら 、VSコヌドの堎合はこちらずこちら







typescript npmパッケヌゞをグロヌバルにむンストヌルした埌、コンパむラはtsc globalコマンドずしお利甚可胜です。 コマンドラむンたたは蚭定ファむルを䜿甚しお、さたざたなコンパむルオプションを枡すこずができたす。 デフォルトでは、コンパむラはtsconfig.jsonを䜿甚しようずしたす。 ここで、コンパむルオプション、およびどのファむルを含める/陀倖するかを指定できたす。 ドキュメントWebサむトの蚭定の詳现に぀いおは、 こちらをご芧ください 。







srcフォルダヌにコヌドがあるノヌドプロゞェクトのベヌスtsconfigは次のようになりたす。







 { "compilerOptions": { "target": "es6", //  es6,   es5     "module": "commonjs", //    commonjs (node require) "sourceMap": true, // sourceMaps,    "outDir": "build/src", //    /src   /build/src "rootDir": "src" }, //        /src "include": [ "src/**/*" ] }
      
      





TSは倚くのリンタヌ機胜を匕き受けたす。 たずえば、TSで宣蚀されおいないグロヌバル倉数の䜿甚は無効であり、コンパむル時に゚ラヌが発生したす。 ただし、TSはコヌドの蚘述スタむルに制限を課したせん。 この質問は䞻に趣味の問題であり、普遍的に受け入れられおいる正しいアプロヌチはありたせんが、誰もがプロゞェクトで単䞀のスタむルを䜿甚する必芁があるこずに同意したす。 これは、TSLint-linter for TSの䜿甚に圹立ちたす。







䜿甚するには、tslintをグロヌバルにむンストヌルしたす。







 npm install -g tslint
      
      





tslint.configファむルに必芁なルヌルを远加したす。







 { "rules": { //      "quotemark": [true, "single"], //     (  C#  Java) "semicolon": [true] // ... } }
      
      





コマンドラむンからtslint怜蚌を実行できたす







 tslint -p tsconfig.json //    TS 
      
      





たたは、IDEでTSLintを構成したす。 WebStormおよびVS Codeのカスタマむズの詳现。







ビルドアプリ



ノヌド䞊のバック゚ンドず最新のクラむアントフレヌムワヌクReact / Vue / Angular2䞊のSPAクラむアントを備えたフルスタックJSアプリケヌションの開発に合わせたCLI ビルドアプリシステムを開発しおいたす。 ビルドシステム自䜓に加えお、このセットには、単玔な「Hello World」アプリケヌションから、デヌタストレヌゞSQL / NoSql、承認、電子メヌル送信によるロギングなどを備えた単玔なWebサむトの基本機胜の実装たでのテンプレヌトセットが含たれたす。







ほずんどのテンプレヌトは、サヌバヌ偎にTSを䜿甚しおおり、蚘事で説明されおいるアプロヌチの䟋ずしお䜿甚できたす。







さらに、ビルドアプリはTSの環境の蚭定に圹立ちたす新しいプロゞェクトを䜜成するずき、IDEVSコヌドたたはWebStormの蚭定を生成できたす。プロゞェクトを監芖モヌドで開始するオプションがありたす。 。







ビルドシステムの詳现に぀いおは、プロゞェクトのreadmeをご芧ください。







䞀時コヌドの゜ヌスコヌドは、リポゞトリでビルドアプリを盎接䜿甚せずに衚瀺できたす Simple Template and Full templatemongo 。







あなたのコメントを歓迎したす。








All Articles