TypeScript (14)


TypeScript (14)
1. Generics Functiontype alias
type HelloFunctionGeneric1 = <T>(message: T) => T;
const helloFunction1: HelloFUnctionGeneric1 = <T>(message: T): T {
  return message;
}
interface
interface HelloFunctionGeneric2 {
  <T>(message: T): T;
}
const helloFunction2: HelloFunctionGeneric2 = <T>(message: T): T => {
  return message;
}
  • 関数タイプのみを定義し、その定義にJENIC(タイプalias、インタフェース)を追加する必要がある場合は、
  • で定義および使用します.
    2. Generics Class
    class Person<T> { 
      private _name: string;
      constructor(name: string) {
        this._name = name;
        }
      }
    new Person("Mark");
    new Person<string>(39); //오류
    3. Generics with extends
    継承とはちょっと違う意味
    class Person<T extends string | number> {
      private _name = T;
      constructor(name: T) {
        this._name = name;
       }
     }
    new Person("Mark");  가능
    new Person(33);     가능 
    new Person(true);    불가
  • Tは文字列と数字しかありません!
  • タイプは常に小さな範囲に制限されます!
  • (他のコードユーザー用)
    4. keyof & type lookup system
  • コンパイル時の正確な位置決めタイプ
  • interface IPerson {
      name: string;
      age: number;
      }
    const person: IPerson = { 
      name: "Mark",
      age: 33,
      }'
    name, age 얻어오거나 바꿀 수 있는 함수エラー)
    function getProp(obj: IPerson, 
          key: "name" | "age"): string | number{
      return obj[key];
      }
    function setProp(obj: Iperson, 
          key: "name" | "age", value: string | name): void {
      obj[key] = value;
    キー関数)
    type Keys = keyof IPerson;
    const keys: Keys = "" -> name 혹은 age 입력가능
    const keys: Keys = "name"; or "age"
    上の内容をクリアして下に入力すると、同じ機能が実現します
    function getProp(obj: IPerson, 
          key: keyof Iperson): IPerson[keyof IPerson]{
      return obj[key];
      }
    function setProp(obj: Iperson, 
          key: keyof IPerson, value: string | name): void {
      obj[key] = value;
    BUT
    IPerson[keyof Iperson] => IPerson["name" | "age"] 
       => IPerson["name"] | IPerson["age"]
       => string | number가 됨
    )
    get
    function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
      return obj[key];
      }
    getProp(person, 'name' or 'age');  // 지정된 타입으로 나온다는 장점
    set
    function setProp<T, K extends keyof T>(obj: T, key: K, value: T[K]): Void {
      obj[key] = value;
      }
    setProp(person, "name", "Anna");
    setProp(person, "age", 33);
  • 安全タイプ
  • コンパイル前にチェック可能なタイプエラー