최종 릴리스 0.4

1907 단어
마지막 블로그에서 저는 이제 코드를 통합하고 테스트하고 PR하는 방법에 대해 글을 쓰고 있습니다.

다음과 같은 전체 코드를 가져왔습니다.

/**
@example
``
import {isEqualType} from 'ts-extras';
const isEqual = isEqualType<ExpectedType, ActualType>();
``
*/
export type IsEqual<ExpectedType, ActualType> =
    (<T>() => T extends ExpectedType ? 1 : 2) extends
    (<T>() => T extends ActualType ? 1 : 2)
        ? true
        : false;

function assertType<T extends boolean>() {
}

export function isEqualType<T, G>(): boolean;
export function isEqualType<T, G>(value : G): boolean;
export function isEqualType<T, G>(a: T, b: G){
    return assertType<IsEqual<IsEqual<T, G>, true>>();
}


이제 주요 작업 중 하나는 코드가 작동하는지 여부를 테스트하고 확인하는 것이었습니다.
프로젝트는 이미 테스트 프레임워크xoava를 사용하고 있으므로 이제 xo 및 ava의 테스트 스타일을 살펴보고 테스트 케이스를 작성하기만 하면 됩니다.
테스트 케이스를 작성하는 방법도 작성 가능한 유형이 많아 어떤 케이스를 작성하고 비교해야 하는지 명확하지 않아 다소 어려웠습니다. 그런 다음 사람들이 다른 프로젝트에서 테스트를 수행한 방법을 찾을 수 있는 인터넷으로 돌아갔습니다. 나는 그것에 대한 요약 이해를 얻기 위해 그것을 구현하기 시작했고 몇 가지 추가 및 빼기 후에 테스트 케이스를 생각해 냈고 테스트할 준비가 되었습니다. 많은 경우가 통과하고 가능한 경우의 넓은 스펙트럼을 다룹니다. 그러나 특별한 경우를 놓쳤을지 의심스럽습니다. 좋은 점은 99% 이상의 케이스를 다룹니다. 하지만 제가 놓친 케이스의 1%를 검색하기를 고대하고 있습니다.

테스트 케이스는 다음과 같습니다.

import test from 'ava';
import {isEqualType} from '../source/index.js';

test('isEqual()', t => {

    t.true(isEqualType<1, 1>());
    t.true(isEqualType<any, any>());
    t.true(isEqualType<unknown, unknown>());

    t.false(isEqualType<{}, {x:1}>());
    t.false(isEqualType<1, 2>());
    t.false(isEqualType<1, any>());
    t.false(isEqualType<1, unknown>());
    t.false(isEqualType<any, unknown>());

});


그런 다음 추가 정보 페이지를 업데이트하고 커밋을 푸시하고 PR을 만들었습니다.

좋은 웹페이지 즐겨찾기