鍍金池/ 問答/HTML/ ts 中請問如何根據(jù)參數(shù)類型進行推斷?

ts 中請問如何根據(jù)參數(shù)類型進行推斷?

例如:

interface A {
  a: number
}

interface B {
  a: number
  b: string
}

const X = (x) => {
  // 操作。。。
  return x
}

參數(shù) x 有可能是 A 或者 B。

如果傳入了 A 類型,希望操作后檢查到返回 x,如果帶屬性 b 即錯誤。
如果傳入了 B 類型,希望操作后檢查到返回 x,如果不帶屬性 b 即為錯誤。

希望返回 x 的類型,斷言等于傳入的類型。

回答
編輯回答
陌上花

我表示這個問題我沒有看得太明白,你的意思是想問 ts 實現(xiàn)的原理嗎?還是如何使用 ts 來達到你說的效果?

如果是前者,這個我就默默地退下了,水平不夠。

如果是后者,可以這么來實現(xiàn):

interface A {
  a: any
}

interface B {
  a: any
  b: any
}

function isB(arg: A | B): arg is B {
    return (<B>arg).b !== undefined;
}

function foo(arg: A | B) {
  if (isB(arg)) {
    // arg is B
    console.log(arg.a, arg.b)
  } else {
    // arg is A
    console.log(arg.a)
  }
}

如果我理解有誤,就無視吧,大神輕噴

2017年10月9日 22:46
編輯回答
若相惜

手寫一個重載可以做到

interface A {
  a: number
}

interface B {
  a: number
  b: string
}

interface XX {
    (x: A): A;
    (x: B): B;
}

const X: XX = (x) => x;
2018年3月21日 16:17