为什么Typescript不够聪明,不能找出下面的例子在实践中不会有错误:
interface M1 {
props: {
color: 'red' | 'blue';
transparency: 0 | 1;
},
f: (props: M1['props']) => string
}
interface M2 {
props: {
age: number;
country: string;
},
f: (props: M2['props']) => string
}
const myFunc = (param: M1 | M2) => {
return param.f(param.props)
}
myFunc
的参数将是M1或M2,但不能同时为两者;因此,当您调用param.f(params.props)
时,您知道params.props
与param.f
的输入属于同一类型。
这是不是逻辑不正确,或者为什么TS不能推断?
发布于 2020-03-30 09:29:57
解决该限制的一种方法是创建一个超接口M
,并使用polymorphic this
type在M
上定义该方法
interface M {
props: { [name: string]: any };
f: (props: this['props']) => string;
}
interface M1 extends M {
props: {
color: 'red' | 'blue';
transparency: 0 | 1;
}
}
interface M2 extends M {
props: {
age: number;
country: string;
}
}
const myFunc = (param: M) => {
return param.f(param.props);
}
https://stackoverflow.com/questions/60922762
复制相似问题