@alicloud/console-components
Version:
Alibaba Cloud React Components
57 lines (55 loc) • 1.96 kB
text/typescript
import {
EIssueType,
EIssueConsequence
} from '../../enum';
import {
IFixing
} from '../../types';
export const FIXING_PROP_GENERIC: IFixing = {
propName: '泛型',
codeOld: `interface SelectProps {
dataSource?: Array<any>;
value?: any;
defaultValue?: any;
onChange?: (value: any, actionType: string, item: any) => void;
}`,
codeNew: `// 单选
interface SelectProps<T, D extends IDataSourceItemBase<T>> {
mode?: 'single'; // 不设或显式说是 single 的时候,为单选
dataSource: D[] | T[]; // 可以是纯值,也可以是 DataSourceItem
value?: T;
defaultValue?: T;
onChange?(value: T, source: TSelectChangeSource, item: TDataSourceMixed<T, D>): void;
}
// 多选
interface SelectProps<T, D extends IDataSourceItemBase<T>> {
mode: 'multiple' | 'tag'; // 当设置这两个值的时候,为多选,下方相关的参数都是数组
dataSource: D[] | T[]; // 可以是纯值,也可以是 DataSourceItem
value?: T[];
defaultValue?: T[];
onChange?(value: T[], source: TSelectChangeSource, item: TDataSourceMixed<T, D>[]): void;
}
export type TSelectProps<T = string, D extends IDataSourceItemBase<T> = IDataSourceItemBase<T>> = ISelectPropsSingle<T, D> | ISelectPropsMulti<T, D>;`,
issues: [{
title: '无法在编译器辨别类型',
code: `<Select {...{
dataSource, // 数字数组
value, // string,实际是 number
onChange // string => void,实际是 number => void
}} />`,
type: EIssueType.TYPE_UNPROTECTED,
error: '可能导致各种运行期问题',
consequences: [EIssueConsequence.ABNORMAL]
}, {
title: '无法在编译器辨别单选或多选',
code: `<Select {...{
mode: 'multiple', // tag
dataSource,
value, // string,实际是 string[]
onChange // string => void,实际是 string[] => void
}} />`,
type: EIssueType.TYPE_UNPROTECTED,
error: '可能导致各种运行期问题',
consequences: [EIssueConsequence.ABNORMAL]
}]
};