cript - TypeAssertion & TypeAnnotation


タイプスクリプトのタイプ定義

Typescriptはコンパイルを行い、ユーザーにタイプのエラーを検証します.これはコード自体の動作に影響しません.変数のタイプを決定するには、2つの方法があります.
  • TypeAssertion
  • TypeAnnotation
  • TypeAssertion


    タイプスクリプトはタイプを推定します.データ型が特定できない場合、データ型をanyまたはunknownと推定することができ、開発者はこれらの推定を無視してタイプを指定することができる.
    のように思われる내가 너보다 타입에 대해서 더 잘 알고, 나의 주장에 대해 의심하지마!と言ったように.
    let doodream = {};
    doodream.id = 123; // error
    doodream.name = "doo" // error
    上記のコードは、オブジェクトにPropertyが定義されていないため、タイプスクリプトでこのエラーが発生します.

    これらのエラーには、次のものが含まれます.
    interface Person {
      id: number;
      name: string;
    }
    
    let doodream = {} as Person;
    doodream.id = 123;
    doodream.name = "doo";
    前述したように、Personタイプは単純にasと断言される.これにより、タイプスクリプトは、オブジェクトが「Person」というインタフェースタイプであると判断し、タイプ推定を可能にする.
    ¥¥¥¥¥¥¥¥¥¥¥¥¥¥

    げんかい


    タイプテーブル名は、前述したように、タイプ推論を可能にする機能にすぎません.すなわち、自動完了のみが許可されます.
    interface Person {
      id: number;
      name: string;
    }
    
    let doodream = {} as Person;
    //doodream.id = 123;
    //doodream.name = "doo";
    上記のコードでは、ユーザがタイプテーブル名を指定しても、実際にオブジェクトプロファイルを定義していない場合に問題は発生しません.asは、ユーザーの立場でこれらの問題に注意する必要があるため、コンパイラはこれらの問題を教えてくれません.

    Type annotation


    この式は、タイプを明確に指定します.変数の後ろには<>があります.
    interface Person {
      id: number;
      name: string;
    }
    
    let doodream : Person = {
      //   id: 123,
      //   name: "doo",
    }

    type assertionとは異なり、属性タイプは明示的に指定され、属性が定義されていない場合はエラー文が表示されます.このような버그 구멍を阻止します.
    ❗しかしtype assertion自体は悪くない.前述したように、開発者がタイプスクリプトのタイプ推論よりも変数についてより詳細なタイプ説明を持っている場合、タイプ断言をasキーワードとして使用できます.ただし、継承関係ではなくまったく異なるタイプを使用しようとすると、エラーが発生します.いずれの場合も、二重タイプの断言を試みなければなりません.これが最後の方法だと思います.