タイプスクリプト


デフォルトでは、タイプスクリプトはタイプ推定を提供します.
タイプが明確でない場合、TSは自ら判断して明確に説明する.
しかし推論はどこからどこまでが基準なので難しい.tsconfig.jsonファイルで設定できます.
(多くの設定が見られます)

tsconfig.json


コラボレーションには、実施者とユーザーがいます.
実施者が推定を主実施関数とする場合、ユーザは他のタイプのパラメータを意図的に挿入する可能性がある.
したがって,このような事態を防止するためにtsconfig.jsonには、実施者にエラーを通知するための多くのオプションがあります.
次のオプションのデフォルトはtrueです.

noImplicitAny

any 타입으로 암시한 표현식과 선언에 오류를 발생시킵니다.パラメータにタイプが指定されていない場合.
a現在anyタイプと推論されている."noImplicitAny": true
function num(a) {
  return a * 30
}
console.log(num(2));       // 60
console.log("hello");     // error
コンパイル手順にエラーが発生しました.noImplicitAnyオプションがオンの場合、タイプスクリプト
「ある場合は、任意のタイプまたは他のタイプを直接指定してください.」出力エラー.
function num(a:number) {
  return a * 30
}

console.log(num(2));    //60
console.log("hello");   // 오류     

strictNullChecks


あなたがタイプを明確にしたと仮定しましょう.
パラメータのタイプは指定されていますが、戻り値のタイプは指定されていません.
次に、タイプスクリプトは2つのnumber|undefinedを自動的に返します.
nullとundefinedはすべてのタイプのサブタイプであるためです.
function num(a:number){    //function num(a: number): number | undefined
  if(a>0){ 
  return  a * 30;
  }
}
console.log(num(2));
console.log(num(-5)+5);      // NAN 인데 오류 출력을 안함
でも問題があるaに負の値を挿入するとundefinedが返されます.
NANを返します.ここに5が追加されているからです.
戻り値に数字を1つだけ指定したらどうなりますか?
function num(a:number):number{    
  if(a>0){ 
  return  a * 30;
  }
}
console.log(num(-5)+5);      // NAN 인데 오류 출력을 안함
タイプスクリプトはnumber値のみが指定されている場合でもundefinedをnumberに含めます.
エラーを出力しません.
この場合、strictNullCheckstrueとすると、
すべてのタイプがnullとundefinedで削除され、エラーが発生しました.

タイプシステム


プログラム言語には多くのタイプのシステムがあります.
  • structural type system
  • nominal type system
  • duck typing
  • structural type system

    구조적 자료형 체계と呼ばれるstructural type systemこれもタイプスクリプトのデータ構造です.名前が異なるが構造が同じである場合は、同じとみなされます.ex) (OCaml Go TypeScript Scala)

    nominal type system

    명목적 자료형 체계と呼ばれるnominal type system継承を宣言しない場合は、構造が一致しても別のタイプとみなされます.
    代表的なものはC++, C#, Java, 오브젝티브-C, Delphi, Swift, Rustなど.

    duck typing


    duckタイプは構造化タイプシステムとほぼ似ている.
    duckタイプは동적 언어であり、構造タイプシステムには정적 언어の差がある.

    タイプ互換性


    タイプスクリプトは、大きなタイプに小さなタイプを割り当てることができます.ここの小さいタイプは서브타입です.
    let subtype : 1 =1;
    let supertype :number=subtype
    subtype = supertype  //오류 발생
    supertype : numbersubtype : 1番号は1を指定できます.
    ただし、数字1の数字タイプは割り当てられません.
    let subtype :[number, number] = [1,2]
    let supertype:number[] = subtype
    subtype = supertype; // 오류 발생
    同様にtupleは配列のサブタイプである.パターンにピンを割り当てることはできますが、反対にすることはできません.anyを見てみましょう.
    何でも受け取れるタイプ.だから彼は最高のタイプです.
    anyは何でも受け入れることができ、逆も同じだ.
    let subtype : number =1;
    let supertype:any = subtype;
    subtype = supertype            //오류 없음
    anyは特殊なタイプなので、1にanyを指定できます.😨
    anyなどの特殊な場合を除き、ほとんどのスーパータイプはサブタイプに割り当てられません.