반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 크롤링
- 레벨 1
- javascript
- 타입 챌린지
- dfs
- 알고리즘
- 가천대
- Crawling
- 그래프
- type challenge
- Algorithm
- 자바스크립트
- 백준
- 프로그래머스 레벨 2
- typescript
- 문자열
- TCP
- 쉬운 문제
- HTTP
- HTTP 완벽 가이드
- 프로그래머스
- Nestjs
- BFS
- ip
- Node.js
- dp
- 타입스크립트
- 수학
- socket
- 소켓
Archives
- Today
- Total
kakasoo
오버로딩에서 코드 자동 완성 기능이 오작동하는 경우 본문
반응형
findOne<T extends string, U extends string, V extends number, W extends number>({
from,
include,
lessThanEqual,
moreThanEqual,
}: {
from: T;
include: IncludeType<U, true>;
lessThanEqual: V;
moreThanEqual: W;
}): ExecutionComparison<ExcutionIncludeForehead<T, U>, W, V>;
findOne<T extends string, U extends string, V extends number, W extends number>({
from,
include,
lessThanEqual,
moreThanEqual,
}: {
from: T;
include: IncludeType<U, false>;
lessThanEqual: V;
moreThanEqual: W;
}): ExecutionComparison<ExcutionIncludeBehind<T, U>, W, V>;
findOne<T extends string, V extends number, W extends number>({
from,
lessThanEqual,
moreThanEqual,
}: {
from: T;
lessThanEqual: V;
moreThanEqual: W;
}): ExecutionComparison<T, W, V>;
findOne<T extends string, U extends string>({
from,
include,
}: {
from: T;
include: IncludeType<U, true>;
}): ExcutionIncludeForehead<T, U>;
findOne<T extends string, U extends string>({
from,
include,
}: {
from: T;
include: IncludeType<U, false>;
}): ExcutionIncludeBehind<T, U>;
findOne<T extends string>({ from }: { from: T }): `${T}`;
/**
*
* @param {findOneParameterType} param0
* @returns pattern is type-safe
*/
findOne<T extends string, foreheadOrBehind extends boolean, U extends string, V extends number, W extends number>({
from,
include,
lessThanEqual,
moreThanEqual,
}: {
from: T;
include?: IncludeType<U, foreheadOrBehind>;
lessThanEqual?: V;
moreThanEqual?: W;
}) {
let expression: string = from;
if (include) {
if (!include.options) {
include.options = { isForehead: true } as any;
}
if (typeof include.options?.isForehead === 'undefined') {
include.options.isForehead = true as any;
}
if (include.options.isForehead) {
expression = this.excuteIncludeStatement(expression, include.partial, { isForehead: true });
} else {
expression = this.excuteIncludeStatement(expression, include.partial, { isForehead: false });
}
}
if (lessThanEqual || moreThanEqual) {
expression = this.executeMoreOrLessThanEqual(expression, lessThanEqual, moreThanEqual);
}
return expression;
}
대부분은 파라미터 단위로 잘리기 때문에 정확하게 추론이 되지만, 동일한 파라미터에서 기본 값에 의한 경우는 오작동할 수 있다.
가령 boolean, true, false를 파라미터로 받는다고 가정할 때, boolean은 true와 false의 응답 타입을 유니온 타입으로 갖게 된다.
하지만 boolean 타입 파라미터의 기본 타입을 true로 지정해도 오작동할 수 있다.
이 경우에는 작성된 함수 오버로딩의 순서가, 위에 작성된 것을 따라가기 때문에 발생하는 것으로 보인다.
오버로딩된 함수 스펙의 순서를 바꿔줌으로써 해결할 수 있으니, 문제가 발생할 경우 이것부터 시도해보는 것이 좋아 보인다.
반응형
'프로그래밍 > regexp-manager' 카테고리의 다른 글
라이브러리를 만들면서 문득 든 생각 (1) | 2023.01.27 |
---|---|
2. slove, and, or, join (0) | 2023.01.17 |
1. regexp-manager 기본 구조 설계 (0) | 2023.01.16 |