TypeScript:返回带有“选择了一个选项”的区别联合

时间:2017-05-31 12:33:52

标签: typescript typescript2.0

如何根据函数的输入参数之一返回带有“selected”类型之一的区别联合?

type KeyValueDocument = {
  key: "type-a";
  propA: string;
} | {
  key: "type-b";
  propB: string;
}

function getKeyValue(key: string): KeyValueDocument {
  // ... implementation ...
  assert(result.key == key);
  return result;
}

const value = getKeyValue("type-b"); 

console.log(value.propB); // Bang!

1 个答案:

答案 0 :(得分:4)

您可以为不同的密钥设置不同的签名:

function getKeyValue(key: "type-a"): { key: "type-a"; propA: string; };
function getKeyValue(key: "type-a"): { key: "type-b"; propB: string; };
function getKeyValue(key: string): KeyValueDocument {
    ...
}