// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. // Copyright @dsherret and dsherret/conditional-type-checks contributors. All rights reserved. MIT license. // deno-lint-ignore-file no-explicit-any ban-types import { Assert, AssertFalse, AssertTrue, assertType, Has, IsAny, IsExact, IsNever, IsNullable, IsUnknown, NotHas, } from "./types.ts"; // IsNullable { // matching assertType>(true); assertType>(true); assertType>(true); // maybe this shouldn't be true? // not matching assertType>(false); assertType>(false); assertType>(false); assertType>(false); } // IsExact { // matching assertType>(true); assertType>(true); assertType>(true); assertType>(true); // ok to have any for both assertType>(true); assertType>(true); assertType>(true); assertType>(true); assertType>( true, ); assertType>(true); assertType>(true); assertType>(true); assertType>(true); // not matching assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>( false, ); assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>( false, ); assertType>( false, ); assertType>( false, ); assertType>(false); assertType>( false, ); assertType< IsExact< { prop: any } | { prop: string }, { prop: number } | { prop: string } > >(false); assertType>(false); // these are different } // Has { // matching assertType>(true); assertType>(true); assertType>(true); // maybe? assertType>(true); assertType>(true); assertType>(true); assertType>(true); // not matching assertType>(false); assertType>(false); assertType>(false); assertType>(false); assertType>(false); } // NotHas { // matching assertType>(true); assertType>(true); // not matching assertType>(false); assertType>(false); assertType>(false); // should be true? } // IsAny { // matching assertType>(true); // not matching assertType>(false); assertType>(false); assertType>(false); // tests for issue #3 (IsAny resolving to boolean) assertType, false>>(true); assertType, false>>(true); } // IsNever { // matching assertType>(true); // not matching assertType>(false); assertType>(false); assertType>(false); } // IsUnknown { // matching assertType>(true); // not matching assertType>(false); assertType>(false); assertType>(false); } // AssertTrue { type test = AssertTrue>; } // AssertFalse { type test = AssertFalse>; } // Assert { type test = | Assert, true> | Assert, false>; } // Recursive types { type RecursiveType1 = string | number | Date | RecursiveType1[]; assertType>(true); type RecursiveType2 = { a: string; prop: RecursiveType2; sub: { prop: RecursiveType2; other: RecursiveType1; }; }; assertType>(true); assertType>(false); }