首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当函数的参数是一个对象时,为什么不能使用Typescript推断方法调用呢?

当函数的参数是一个对象时,为什么不能使用Typescript推断方法调用呢?
EN

Stack Overflow用户
提问于 2020-03-30 09:09:41
回答 1查看 19关注 0票数 1

为什么Typescript不够聪明,不能找出下面的例子在实践中不会有错误:

代码语言:javascript
运行
复制
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.propsparam.f的输入属于同一类型。

这是不是逻辑不正确,或者为什么TS不能推断?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 09:29:57

解决该限制的一种方法是创建一个超接口M,并使用polymorphic this typeM上定义该方法

代码语言:javascript
运行
复制
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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60922762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档