手を動かしながら学ぶ TypeScript 2부 -- 応用的な型

10469 단어 typescript



応用的な型も網羅して噛み砕きたくなった.
前回より応用的.

参考



手を動かしながら学ぶ TypeScript
by SmartHR
SECTION-025 TypeScript の型や構文紹介
P.277 ~

https://www.amazon.co.jp/%E6%89%8B%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-TypeScript-%E6%B8%A1%E9%82%89%E6%AF%94%E5%91%82%E6%A8%B9-ebook/dp/B09KZJXDN1

目次


  • 인터페이스
  • 유형
  • 클래스
  • 추상화
  • 유니온
  • 절대
  • 어설션

  • 인터페이스(확장)



    interface Creature {
      id: string
    }
    interface Person extends Creature {
      name: string,
      power: number,
    }
    
    const kaede: Person = {
      id: '0902',
      name: 'kaede',
      power: 70,
    }
    

    id のみの Creature 클라스を정의
    それを継承して更に 이름, 권력 を追加した 사람
    この Person を使うと、id, name, power の型を使える(必須).

    유형 (&)



    型Eirias.interface とは違って = が必要.

    type Creature = {
      id: string
    }
    type Person = Creature & {
      name: string,
      power: number,
    }
    
    const kaede: Person = {
      id: '0902',
      name: 'kaede',
      power: 70,
    }
    


    형에이리아스의 타입으로도
    인터페이스

    Person Extends Creature
    


    と同じように

    Person = Creature &
    


    で Creature の継承ができた.

    なお、先ほど의 인터페이스와 変数名が同じなので、
    同じ階層に先ほどのファイルがあると別名ファylでも重複エラーになるので注意.

    수업



    class Student {
      fullName: string
    
      constructor(firstName:string, lastName:string,) {
        this.fullName = firstName+lastName
      }
    }
    
    const Tanaka = new Student('Tanaka', 'Taro')
    
    console.log(Tanaka.fullName);
    

    class でも書ける.
    fullName を外部からアクセスできる形で定義して
    생성자 のなかで計算させる.

    継承して new で作り、fullName にアクセスする ことができる.

    ts-node class.ts
    TanakaTaro



    実行すると fullName が返ってくる.

    しかし、この状態だと lastName は private なので

    console.log(Tanaka.lastName);
    


    악세스루와

    Property 'lastName' does not exist on type 'Student'



    학생 にはないというエラーが出る.

      constructor(firstName:string, public lastName:string,) {
        this.fullName = firstName+lastName
      }
    


    だが, コンストラクタで定義するときに public をつけると

    ts-node class.ts
    TanakaTaro
    Taro



    콘스트라크타의 중신으로 も아크세스로 돕겠습니다.


    초록/구현



    用途不明


    노동 조합



    どちらかが入る型.
    3 つ以上も作れる.
    stringNullCheck 가 false の場合、
    全ての型は undfined と null のユニオンになる.

    type stringOrNumber =  string | number
    
    const id = 1234
    const userId = '1234'
    



    절대



    何も入らない.

    let NoUser: never
    NoUser = undefined
    


    Type 'undefined' is not assignable to type 'never'



    정의되지 않은 すらも入らない.


    유형 설명



    https://qiita.com/irico/items/9d71060e52ffc1e79962

    let age = 12
    const gender = 'male'
    age = gender as any
    console.log(age);
    console.log(typeof age);
    


    ts-node assertion.ts
    male
    string



    をつける 이것저것으로
    最初決めた型を変更して別の型の中身を入れられてしまう.

    type teacher = {
      licenseId: string,
      licenseActiveYear: number,
    } 
    // const BadTeacher:teacher = {}
    const NoLicenseTeacher = {} as teacher
    
    console.log(NoLicenseTeacher);
    


    ts-node assertion.ts
    {}



    また、このように必須のプロパティも無視して型を利用で きてしまう.

    BadTeacher のように、普通に 선생 型を利用して空で作成すれば
    当然必須の型がないので エラーになる.

    しかし、NoLicenseTeacher では as で上書きしてるので teacher の型を使っていてもエラーが出ない!

    TypeScript는 이를 지원합니다.

    좋은 웹페이지 즐겨찾기