[TypeScript] extends

타입 관계를 나타내는 연산자입니다.

다음은 T 타입이 Base 타입의 모든 프로퍼티를 포함하는지 확인합니다.

T extends Base

BirdAnimal의 구조를 만족하고, 모든 속성을 포함하며, 추가 속성을 가집니다.

interface Animal {
    name: string
    age: number
}

interface Bird extends Animal {
    fly: () => void
}

제네릭은 Animal 타입으로 제한됩니다.

function getName<T extends Animal>(entity: T) {
    return entity.name
}

삼항연산자를 사용하여 타입을 검사할 수도 있습니다.

제네릭이 Animal 타입이라면 IsAnimal 타입은 YES가 되고, 그게 아니라면 false가 됩니다.

interface Animal {
    name: string
    age: number
}

type IsAnimal<T> = T extends Animal ? "YES" : false

const animal = {
    name: "Jun",
    age: 80
}

type Answer = IsAnimal<typeof animal> // "YES"