【问题标题】:Typescript function overloading with object带有对象的打字稿函数重载
【发布时间】:2018-05-13 02:53:25
【问题描述】:

我有一个接受一个对象作为唯一参数的函数。例如:

interface MyMap<T> {
  [id: string]: T;
}

type Options = {
  asObject: boolean,
  other?: Function
};

  function get(options: Options): any[];
  function get(options: Options): MyMap<any>;
  function get(options: Options): any[] | MyMap<any>;
  function get(options: Options = {asObject: false, other: () => {}}): any[] | MyMap<any> {
    if (options.asObject) return {} as MyMap<any>;

    return [];
}


const result = get({asObject: true});

当 asObject 值为 true 时,我想将类型推断为 MyMap。我知道如何使用简单的布尔值来做到这一点,但是如何使用对象来实现呢?

【问题讨论】:

    标签: typescript


    【解决方案1】:
    function get(options: {asObject: true}): MyMap<any>;
    function get(options: {asObjectb false}): any[];
    function get(): any[];
    function get(options: Options = {asObject: false, other: () => {}}): any[] | MyMap<any> {
       //  ... 
    }
    

    应该就是你所需要的。这将重载属性 asObject 的文字类型 truefalse 的函数。

    请注意,当声明重载时,实现本身不会为重载集贡献签名。

    【讨论】:

    • 函数可以返回一个数组。这取决于 asObject 属性。
    • 没问题。很高兴为您提供帮助
    • 但是为什么不能识别默认值呢?函数get(选项:选项= {asObject:false,其他:()=> {}}):任何[] |我的地图 { }
    • 这仍被推断为 MyMap
    • 因为重载的实现签名对重载集没有贡献。
    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2023-03-21
    相关资源
    最近更新 更多