Closed
Description
TypeScript Version: 4.2.3
Search Terms: number extends enum
Code
export enum NumericEnumFruit {
APPLE = 1,
BANANA = 2,
}
export type NumericEnumFruitIsSuperNumber = number extends NumericEnumFruit ? NumericEnumFruit : never; // Yes, returns NumericEnumFruit
export type NumericEnumFruitIsSuperString = string extends NumericEnumFruit ? NumericEnumFruit : never; // No, returns never
export enum StringEnumFruit {
APPLE = 'apple',
BANANA = 'banana',
}
export type StringEnumFruitIsSuperNumber = number extends StringEnumFruit ? StringEnumFruit : never; // No, returns never
export type StringEnumFruitIsSuperString = string extends StringEnumFruit ? StringEnumFruit : never; // No, returns never
export enum HeterogeneousEnumFruit {
APPLE = 'apple',
BANANA = 2,
}
export type HeterogeneousEnumFruitIsSuperNumber = number extends HeterogeneousEnumFruit ? HeterogeneousEnumFruit : never; // Yes, returns HeterogeneousEnumFruit
export type HeterogeneousEnumFruitIsSuperString = string extends HeterogeneousEnumFruit ? HeterogeneousEnumFruit : never; // No, returns never
const ConstObjectFruit = {
APPLE: 'apple',
BANANA: 2,
// 2: 'BANANA'
} as const;
type ConstObjectFruitType = typeof ConstObjectFruit[keyof typeof ConstObjectFruit];
export type ConstObjectFruitIsSuperNumber = number extends ConstObjectFruitType ? ConstObjectFruitType : never; // No, returns never
export type ConstObjectFruitIsSuperString = string extends ConstObjectFruitType ? ConstObjectFruitType : never; // No, returns never
Expected behavior:
Always got never
for all above conditional types.
Actual behavior:
For number extends Enum
cases, it's evaluated to true, instead of false. While things are correct for string extends Enum
and number extends ConstObjectType
.
Related Issues:
Didn't find related issues.
Metadata
Metadata
Assignees
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
MartinJohns commentedon Mar 16, 2021
See: #32690 (comment)
typescript-bot commentedon Mar 18, 2021
This issue has been marked as a 'Duplicate' and has seen no recent activity. It has been automatically closed for house-keeping purposes.