과부하 유형 정의를 고려한 에티켓 TypeScript
3612 단어 d.tsTypeScript유형 정의overload유형
적재량을 초과할 때 정확한 유형 정의가 없으면 유형이 제대로 작용하지 못해 곤란하지 않나요.
그래서 과부하 시 유형 정의를 복습하고 싶습니다.
결론
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만 전달하는 매개 변수를 인정하고 싶지 않았습니다.
나는 이런 상황이 정말 있다고 생각한다. 왜...
응, 원래의 자바스크립트가 지나친 서명 디자인이 안 된다고 한다면 내 생각에는 이렇다.
Reference
이 문제에 관하여(과부하 유형 정의를 고려한 에티켓 TypeScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/macinjoke/items/c95ff8599fb0873b4d88
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
여기서 끝날 때 알아차렸는데 마지막에 느슨한 금형을 만들면 예를 들면 아래의 코드가 화를 내지 않아요.
const hoge = new Hoge('id')
이 id만 전달하는 매개 변수를 인정하고 싶지 않았습니다.나는 이런 상황이 정말 있다고 생각한다. 왜...
응, 원래의 자바스크립트가 지나친 서명 디자인이 안 된다고 한다면 내 생각에는 이렇다.
Reference
이 문제에 관하여(과부하 유형 정의를 고려한 에티켓 TypeScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/macinjoke/items/c95ff8599fb0873b4d88텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)