Closed as not planned
Description
π Search Terms
type narrow
π Version & Regression Information
TypeScript 5.8.3
β― Playground Link
π» Code
namespace enums {
export const enum RowFilterType {
Includes = 1,
NotIncludes = 2,
Between = 3,
NotBetween = 4,
BigThan = 5,
BigAndEqualThan = 6,
LessThan = 7,
LessAndEqualThan = 8,
Equal = 9,
NotEqual = 10
}
}
type NormalFilterType = enums.RowFilterType.Equal | enums.RowFilterType.NotEqual | enums.RowFilterType.BigThan | enums.RowFilterType.LessThan | enums.RowFilterType.BigAndEqualThan | enums.RowFilterType.LessAndEqualThan
type Form = {
uid: string,
fieldUid?: string,
filterType: NormalFilterType,
value: {
type: 'fixed',
value?: number | string,
valueType: 'number' | 'string'
} | {
type: 'field',
fieldUid?: string
}
} | {
uid: string,
fieldUid?: string,
filterType: enums.RowFilterType.Between | enums.RowFilterType.NotBetween,
left?: number,
right?: number
} | {
uid: string,
fieldUid?: string,
filterType: enums.RowFilterType.Includes | enums.RowFilterType.NotIncludes,
valueType: 'number' | 'string',
value?: string
}
const required = {
required: true,
message: 'this field is required.'
}
const form = undefined as Form | undefined
let rules: Record<string, any>
if (form === undefined) {
rules = {}
} else if (form.filterType === enums.RowFilterType.Between || form.filterType === enums.RowFilterType.NotBetween) {
rules = {
fieldUid: [required],
left: [required],
right: [required]
}
} else if (form.filterType === enums.RowFilterType.Includes || form.filterType === enums.RowFilterType.NotIncludes) {
rules = {
fieldUid: [required],
value: [required]
}
} else {
const filterType = form.filterType // typeof filterType is NormalFilterType
const value = form.value // here the form should has properties of value, but it's not.
}
π Actual behavior
See the line at 66, the type of form should be narrowed in this switch, but it's not.
π Expected behavior
The type of form should be narrowed.
Additional information about the issue
No response