Skip to content

Commit aaad1f2

Browse files
authored
chore: update ts define (#692)
1 parent b70e6d8 commit aaad1f2

File tree

2 files changed

+34
-43
lines changed

2 files changed

+34
-43
lines changed

src/Select.tsx

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -133,50 +133,36 @@ export interface SharedSelectProps<OptionType extends BaseOptionType = DefaultOp
133133
menuItemSelectedIcon?: RenderNode;
134134
}
135135

136-
export interface SingleRawSelectProps<OptionType extends BaseOptionType = DefaultOptionType>
137-
extends SharedSelectProps<OptionType> {
136+
export interface SingleSelectProps<
137+
ValueType = any,
138+
OptionType extends BaseOptionType = DefaultOptionType,
139+
> extends SharedSelectProps<OptionType> {
138140
mode?: 'combobox';
139-
labelInValue?: false;
140-
value?: RawValueType | null;
141-
defaultValue?: RawValueType | null;
142-
onChange?: (value: RawValueType, option: OptionType) => void;
141+
labelInValue?: boolean;
142+
value?: ValueType | null;
143+
defaultValue?: ValueType | null;
144+
onChange?: (value: ValueType, option: OptionType) => void;
143145
}
144146

145-
export interface SingleLabeledSelectProps<OptionType extends BaseOptionType = DefaultOptionType>
146-
extends SharedSelectProps<OptionType> {
147-
mode?: 'combobox';
148-
labelInValue: true;
149-
value?: LabelInValueType | null;
150-
defaultValue?: LabelInValueType | null;
151-
onChange?: (value: LabelInValueType, option: OptionType) => void;
152-
}
153-
154-
export interface MultipleRawSelectProps<OptionType extends BaseOptionType = DefaultOptionType>
155-
extends SharedSelectProps<OptionType> {
147+
export interface MultipleSelectProps<
148+
ValueType = any[],
149+
OptionType extends BaseOptionType = DefaultOptionType,
150+
> extends SharedSelectProps<OptionType> {
156151
mode: 'multiple' | 'tags';
157-
labelInValue?: false;
158-
value?: RawValueType[] | null;
159-
defaultValue?: RawValueType[] | null;
160-
onChange?: (value: RawValueType[], option: OptionType[]) => void;
152+
labelInValue?: boolean;
153+
value?: ValueType[] | null;
154+
defaultValue?: ValueType[] | null;
155+
onChange?: (value: ValueType[], option: OptionType[]) => void;
161156
}
162157

163-
export interface MultipleLabeledSelectProps<OptionType extends BaseOptionType = DefaultOptionType>
164-
extends SharedSelectProps<OptionType> {
165-
mode: 'multiple' | 'tags';
166-
labelInValue: true;
167-
value?: LabelInValueType[] | null;
168-
defaultValue?: LabelInValueType[] | null;
169-
onChange?: (value: LabelInValueType[], option: OptionType[]) => void;
170-
}
158+
export type SelectProps<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> =
159+
| SingleSelectProps<ValueType, OptionType>
160+
| MultipleSelectProps<ValueType, OptionType>;
171161

172-
// TODO: Types test
173-
export type SelectProps<OptionType extends BaseOptionType = DefaultOptionType> = Omit<
174-
| SingleRawSelectProps<OptionType>
175-
| SingleLabeledSelectProps<OptionType>
176-
| MultipleRawSelectProps<OptionType>
177-
| MultipleLabeledSelectProps<OptionType>,
178-
'onChange'
179-
> & {
162+
export type InternalSelectProps<
163+
ValueType = any,
164+
OptionType extends BaseOptionType = DefaultOptionType,
165+
> = Omit<SelectProps<ValueType, OptionType>, 'onChange'> & {
180166
onChange?: (value: DraftValueType, option: OptionType | OptionType[]) => void;
181167
};
182168

@@ -185,7 +171,7 @@ function isRawValue(value: DraftValueType): value is RawValueType {
185171
}
186172

187173
const Select = React.forwardRef(
188-
(props: SelectProps<DefaultOptionType>, ref: React.Ref<BaseSelectRef>) => {
174+
(props: InternalSelectProps<any, DefaultOptionType>, ref: React.Ref<BaseSelectRef>) => {
189175
const {
190176
id,
191177
mode,
@@ -661,9 +647,10 @@ if (process.env.NODE_ENV !== 'production') {
661647
}
662648

663649
const TypedSelect = Select as unknown as (<
664-
Values extends BaseOptionType | DefaultOptionType = DefaultOptionType,
650+
ValueType = any,
651+
OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,
665652
>(
666-
props: React.PropsWithChildren<SelectProps<Values>> & {
653+
props: React.PropsWithChildren<SelectProps<ValueType, OptionType>> & {
667654
ref?: React.Ref<BaseSelectRef>;
668655
},
669656
) => React.ReactElement) & {

src/utils/warningPropsUtil.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
import * as React from 'react';
22
import warning, { noteOnce } from 'rc-util/lib/warning';
33
import toNodeArray from 'rc-util/lib/Children/toArray';
4-
import type { SelectProps } from '..';
54
import { convertChildrenToData } from './legacyUtil';
65
import { toArray } from './commonUtil';
7-
import type { RawValueType, LabelInValueType, BaseOptionType } from '../Select';
6+
import type {
7+
RawValueType,
8+
LabelInValueType,
9+
BaseOptionType,
10+
InternalSelectProps,
11+
} from '../Select';
812
import { isMultiple } from '../BaseSelect';
913

10-
function warningProps(props: SelectProps) {
14+
function warningProps(props: InternalSelectProps) {
1115
const {
1216
mode,
1317
options,

0 commit comments

Comments
 (0)