最終リリース 0.4

1861 ワード

最後のブログでは、コードのまとめ、テスト、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>>();
}


ここでの主なタスクの 1 つは、コードが機能しているかどうかをテストして確認することでした.
このプロジェクトは既にテスト フレームワーク 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>());

});


次に、readme ページを更新し、コミットをプッシュして PR を作成しました