programing

TypeScript 인터페이스 구현이 메서드 매개 변수를 확인하지 않음

abcjava 2023. 6. 15. 21:31
반응형

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

반응형