더북(TheBook)

객체의 메서드를 타이핑할 때도 타이핑 방법에 따라 변성이 정해집니다. strict 옵션이 활성화된 상황입니다.

interface SayMethod {
  say(a: string | number): string;
}
interface SayFunction {
  say: (a: string | number) => string;
}
interface SayCall {
  say: {
    (a: string | number): string
  }
}
const sayFunc = (a: string) => 'hello';
const MyAddingMethod: SayMethod = {
  say: sayFunc //이변성
}
const MyAddingFunction: SayFunction = {
  say: sayFunc //반공변성
}
const MyAddingCall: SayCall = {
  say: sayFunc //반공변성
}
// Type '(a: string) => string' is not assignable to type '(a: string | number) => string'. Types of parameters 'a' and 'a' are incompatible. Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.