type-fest/test-d/conditional-simplify.ts
Roman Wu b7a4771b19
Export ConditionalSimplify and ConditionalSimplifyDeep types (#1094)
Co-authored-by: Sindre Sorhus <sindresorhus@gmail.com>
2025-05-08 17:16:34 +07:00

26 lines
1.1 KiB
TypeScript

import {expectNotAssignable, expectType} from 'tsd';
import type {ConditionalSimplify} from '../index.d.ts';
type Position = {top: number; left: number};
type Size = {width: number; height: number};
// In your editor, hovering over `PositionAndSizeSimplified` will show a simplified object with all the properties.
type PositionAndSizeIntersection = Position & Size;
type PositionAndSizeSimplified = ConditionalSimplify<PositionAndSizeIntersection>;
const position = {top: 120, left: 240};
const size = {width: 480, height: 600};
const positionAndSize = {...position, ...size};
expectType<PositionAndSizeSimplified>(positionAndSize);
// Exclude function type to be simplified.
type SomeFunction = (type: string) => string;
type SimplifiedFunctionFail = ConditionalSimplify<SomeFunction>; // Return '{}'
type SimplifiedFunctionPass = ConditionalSimplify<SomeFunction, Function>; // Return '(type: string) => string'
declare const simplifiedFunctionFail: SimplifiedFunctionFail;
declare const simplifiedFunctionPass: SimplifiedFunctionPass;
expectNotAssignable<SomeFunction>(simplifiedFunctionFail);
expectType<SomeFunction>(simplifiedFunctionPass);