【发布时间】:2020-09-20 12:36:30
【问题描述】:
我列出了几种类型:
interface Person {
name: string;
}
interface Core<T> {
fnc: (arg: T) => void;
args: T;
}
interface One extends Core<Person> {
type: 'modifyPerson';
}
interface Two extends Core<Person & { age: number }> {
type: 'modifyAgeingPerson';
}
然后我有一个函数可以处理修改一个人或一个老年人的共享属性 - 因为它有一个联合类型,一个例子如下:
modifyPersonCharacteristics(person: One | Two) {
person.fnc({ ...person.args, name: 'Steven' });
}
Typescript 不喜欢这样,因为存在类型重叠 - 但在这种情况下,因为使用了泛型,这是否重要? One 或 Two 的实例都可以接受传递的参数。
有没有办法让 typescript 看到泛型的大局?
附带说明一下,以下是可行的,但出于显而易见的原因,我宁愿不这样做:
modifyPersonCharacteristics(person: One | Two) {
if (person.type === 'modifyPerson') {
person.fnc({ ...person.args, name: 'Steven' });
} else {
person.fnc({ ...person.args, name: 'Steven' });
}
}
【问题讨论】:
标签: typescript generics