과부하 유형 정의를 고려한 에티켓 TypeScript

TypeScript 개발에서만 과부하 (여러 함수의 형식 정의를 쓰는 것) 를 사용하지 않는다고 생각하지만, JavaScript 코드에 d.ts 파일을 쓸 때 과부하를 자주 사용합니다.
적재량을 초과할 때 정확한 유형 정의가 없으면 유형이 제대로 작용하지 못해 곤란하지 않나요.
그래서 과부하 시 유형 정의를 복습하고 싶습니다.

결론

  • 과부하된 금형을 쓸 때 엄격한 금형에서 느슨한 금형까지의 순서(기본)
  • 즉, 마지막으로 모든 것을 포함하는 가장 느슨한 금형을 쓴다(?)
  • 정부에서도 쓰여 있다.
    https://www.typescriptlang.org/docs/handbook/functions.html#overloads

    원인


    TypeScript가 함수의 유형을 해석할 때 위에서 순서대로 볼 때 해당될 때까지
    엄격한 유형이 적용되면 적용하는 것이 좋다.
    느슨한 형식부터 쓰면 더 엄격한 형식으로 만들 수 있지만 느슨한 쪽에 적용된다.
    이러한 기본적인 상황을 전제로 다음과 같은 유형 정의가 있다.
    export class Hoge {
      constructor(id: string, options: Options)
      constructor(options: Options)
    
    이 유형의 정의는 실제로 충분하지 않습니다(?).정확히 이거야.
    export class Hoge {
      constructor(id: string, options: Options)
      constructor(options: Options)
      constructor(arg1: string | Options, arg2?: Options)
    
    마지막으로 지금까지 모든 유형을 포함하는 가장 느슨한 유형 정의를 썼다.
    전자의 유형 정의라면, 예를 들어 다음 코드에서 유형 오류가 발생했습니다.

    ConstructorParameters 구조 함수의 매개 변수의 유형을 얻을 수 있지만, 이때 과부하라면 가장 아래에 정의된 유형이 적용되는 것 같다(전자라면constructor(options: Options).
    후자의 유형 정의라면 오류가 발생하지 않습니다.

    따라서 과부하 정의형을 사용할 때 마지막으로 지금까지의 형을 포함해 가장 느슨한 형을 쓰는 것은 정의라고 할 수 있다.
    끝.

    반박


    여기서 끝날 때 알아차렸는데 마지막에 느슨한 금형을 만들면 예를 들면 아래의 코드가 화를 내지 않아요.
    const hoge = new Hoge('id')
    
    이 id만 전달하는 매개 변수를 인정하고 싶지 않았습니다.
    나는 이런 상황이 정말 있다고 생각한다. 왜...
    응, 원래의 자바스크립트가 지나친 서명 디자인이 안 된다고 한다면 내 생각에는 이렇다.

    좋은 웹페이지 즐겨찾기