mirror of
https://github.com/sindresorhus/type-fest.git
synced 2025-12-08 19:25:05 +00:00
IsLiteral: Return false for tagged types (#886)
This commit is contained in:
parent
cabce984e5
commit
587380ce8e
10
source/is-literal.d.ts
vendored
10
source/is-literal.d.ts
vendored
@ -22,10 +22,12 @@ LiteralCheck<1, string>
|
||||
*/
|
||||
type LiteralCheck<T, LiteralType extends Primitive> = (
|
||||
IsNever<T> extends false // Must be wider than `never`
|
||||
? [T] extends [LiteralType] // Must be narrower than `LiteralType`
|
||||
? [LiteralType] extends [T] // Cannot be wider than `LiteralType`
|
||||
? false
|
||||
: true
|
||||
? [T] extends [LiteralType & infer U] // Remove any branding
|
||||
? [U] extends [LiteralType] // Must be narrower than `LiteralType`
|
||||
? [LiteralType] extends [U] // Cannot be wider than `LiteralType`
|
||||
? false
|
||||
: true
|
||||
: false
|
||||
: false
|
||||
: false
|
||||
);
|
||||
|
||||
@ -5,6 +5,7 @@ import type {
|
||||
IsNumericLiteral,
|
||||
IsBooleanLiteral,
|
||||
IsSymbolLiteral,
|
||||
Tagged,
|
||||
} from '../index';
|
||||
|
||||
const stringLiteral = '';
|
||||
@ -65,3 +66,8 @@ type A2 = IsNumericLiteral;
|
||||
type A3 = IsBooleanLiteral;
|
||||
// @ts-expect-error
|
||||
type A4 = IsSymbolLiteral;
|
||||
|
||||
// Tagged types should be false
|
||||
expectType<IsStringLiteral<Tagged<string, 'Tag'>>>(false);
|
||||
expectType<IsNumericLiteral<Tagged<number, 'Tag'>>>(false);
|
||||
expectType<IsBooleanLiteral<Tagged<boolean, 'Tag'>>>(false);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user