打字稿+联合类型的运算符用法

时间:2019-10-23 12:21:34

标签: typescript

我试图通过(在这种情况下为内置)运算符重载来教学生诸如多态性之类的复杂问题,并且我创建了一个我认为应该可行但没有奏效的示例。我希望Typescript专家提供一些有关此示例失败的见解。

function add2(a: number) {
  return a + 2;
} // works fine, adds 2 and returns a number

function concat2(a:string) {
  return a + 2;
} // works fine, concatenates '2' and returns a string

function addOrConcatenateTwo(a: string | number) {
  return a + 2;
} 
// compile error. I THOUGHT it would return a string | number but it errors out no matter what.

我认为Typescript会看到+为字符串定义,并且+也为数字定义,这将允许最后一个函数运行。这就是跨接口共享方法名称的工作方式,那么+运算符为什么会以不同的方式工作?

这很好用,并且完全按照我上面的示例所做的工作。这是错误吗?诚然,那可能只会出现在人工教育场景中?

function addOrConcatenateTwo(a: string | number) {
    if (typeof (a) == "string") {
        return a + 2;
    } else {
        return a + 2;
    }
}

0 个答案:

没有答案