代码之家  ›  专栏  ›  技术社区  ›  Jeanluca Scaljeri

根据输入参数让打字脚本知道输出类型是什么

  •  0
  • Jeanluca Scaljeri  · 技术社区  · 3 年前

    我有一个函数,它返回一个对象或字符串,简化后看起来像这样:

    const data = {
        a: 'x',
        b: 'y'
    };
    
    function getData(key?: string): Record<string, string> | string {
        return key ? data[key] : data;
    }
    

    所以,这意味着,如果你用 钥匙

    const out = getData('b'); // => 'y' (string)
    console.log(out.toUpperCase()); // => typescript error
    

    DEMO

    这里需要告诉打字机的类型是什么 外面的 是,a 记录<string,string> 或者只是一个 一串 .

    所以我的问题是,当你指定了一个 钥匙 它将永远是 一串 否则a 记录 ?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Roberto Zvjerković sabithpocker    3 年前

    是的,你可以在以下人员的帮助下完成 overloads :

    const data = {
        a: 'x',
        b: 'y'
    };
    
    type Data = typeof data
    
    function getData<T extends keyof Data>(key: T):Data[T]
    function getData<T extends keyof Data>():Data
    function getData<T extends keyof Data>(key?: T) {
        return key ? data[key] : data;
    }
    
    const result = getData('a') // string
    const result2 = getData('b') // string
    const result3 = getData() // Data
    

    Playground