作者:王哲弘
1、索引签名的参数类型不能是联合类型
type Key = 'foo' | 'test';
type IndexType = {
[prop: Key]: number | string;
}
let obj: IndexType = {
foo: 1,
test: 'hello'
}
obj['test'] = 'hahaha';
以上代码编译时会出现以下警告:
TS1337: An index signature parameter type cannot be a union type. Consider using a mapped object type instead. |
---|
我们需要改写IndexType 类型,如何修改呢?上面的警告已经给出提示,那就是使用映射类型代替:
type IndexType = {
[p in Key]: number | string; }
2、redux state 类型定义时不要写成可选属性(以下是错误示范)
export interface ModifyGrades {
savedList?: ModifyItem[]; // 已保存的修改记录列表
groups?: Groups[]; // 题型数据
questions?:Question[];
subjectLists?: Subject[];
summaryId?: number;
studentAnswers?: StudentAnswers;
title?: string; //业务头额外标题
}
正确的做法是在某组件需要的时候使用映射类型进行转换(ts中已经定义了Partial类型,可以直接使用) 如下
interface ModifyGrades {
savedList: ModifyItem[]; // 已保存的修改记录列表
groups: Groups[]; // 题型数据
questions:Question[];
subjectLists: Subject[]