TypeScript 인터페이스 구현이 메서드 매개 변수를 확인하지 않음
interface IConverter {
convert(value: number): string
}
class Converter implements IConverter {
convert(): string { // no error?
return '';
}
}
const v1: IConverter = new Converter();
const v2: Converter = new Converter();
v1.convert(); // error, convert has parameter, although Converter's convert doesn't expect one
v2.convert(); // ok, convert has no parameters, although Converter implements IConverter which should has paramater
Converter
도구들IConverter
매개 변수가 하나인 방법이 있지만,Converter
이 매개 변수가 없습니다.우리가 이 인터페이스를 완전히 구현하지 않으면 TS 컴파일러가 오류를 발생시키지 않는 이유는 무엇입니까?
유형 스크립트는 구조적 유형을 사용하여 유형 호환성을 확인합니다.함수의 경우 컴파일러가 선언을 통해 안전하게 호출할 수 있도록 구현을 결정할 수 있는 한 선언 및 구현에 대해 정확하게 동일한 서명을 가질 필요가 없습니다.
이 경우, 매개 변수가 적은 함수는 더 많은 매개 변수를 가진 함수 선언을 위한 구현이 될 수 있습니다. 이는 매개 변수에 전달된 추가 매개 변수가 구현에 의해 무시되기 때문에 런타임 오류가 발생할 수 없기 때문입니다(대부분의 경우 어쨌든 의존하는 것에 대한 코너 케이스가 있을 수 있습니다).Function.length
)
오류가 발생하는 이유v1
하지만 아닙니다.v2
이는 할당이 완료되면 컴파일러가 변수의 유형만 알고 사용자가 원래 할당한 유형은 알 수 없으며 변수의 실제 유형을 기준으로 확인하기 때문입니다.그러니깐v1
이 수단IConverter.convert
매개 변수가 필요하며, 필요하지 않음을 알 수 있는 방법이 없습니다.위해서v2
확인할 것입니다.Converter.convert
인수가 필요 없는 것으로 알려져 있습니다.
TypeScript를 사용하면 런타임에 추가 매개 변수가 무시되기 때문에 더 적은 매개 변수가 필요한 함수를 더 많은 매개 변수가 필요한 함수 유형으로 처리할 수 있습니다.핸드북을 참조하십시오.
언급URL : https://stackoverflow.com/questions/51727721/typescript-interface-implementing-doesnt-check-method-parameters
'programing' 카테고리의 다른 글
코드에서 TextView의 텍스트 색상을 설정하는 방법은 무엇입니까? (0) | 2023.06.15 |
---|---|
인접 열에 따른 자동 채우기 (0) | 2023.06.15 |
Python 디버깅 팁 (0) | 2023.06.15 |
임의 키를 사용하여 입력한 개체를 선언하는 방법은 무엇입니까? (0) | 2023.06.15 |
하나의 필드를 CLOB로 사용하여 오라클 삽입 스크립트를 작성하는 방법은 무엇입니까? (0) | 2023.06.15 |