在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ ts 中請(qǐng)問(wèn)如何根據(jù)參數(shù)類(lèi)型進(jìn)行推斷?

ts 中請(qǐng)問(wèn)如何根據(jù)參數(shù)類(lèi)型進(jìn)行推斷?

例如:

interface A {
  a: number
}

interface B {
  a: number
  b: string
}

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

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

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

希望返回 x 的類(lèi)型,斷言等于傳入的類(lèi)型。

回答
編輯回答
陌上花

我表示這個(gè)問(wèn)題我沒(méi)有看得太明白,你的意思是想問(wèn) ts 實(shí)現(xiàn)的原理嗎?還是如何使用 ts 來(lái)達(dá)到你說(shuō)的效果?

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

如果是后者,可以這么來(lái)實(shí)現(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)
  }
}

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

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

手寫(xiě)一個(gè)重載可以做到

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