jkchao / typescript-book-chinese

TypeScript Deep Dive 中文版
https://jkchao.github.io/typescript-book-chinese/
MIT License
6.53k stars 673 forks source link

修复示例代码错误 #169

Closed whinc closed 4 years ago

whinc commented 4 years ago

译文地址:https://jkchao.github.io/typescript-book-chinese/typings/overview.html#%E7%B1%BB%E5%9E%8B%E5%88%AB%E5%90%8D

联合类型示例中的泛型 T 和 U 默认类型是 unknown,他们的结果 result 类型时 T & U 也是 unknown 类型,调用 result.hasOwnProperty() 方法是非法的。

function extend<T, U>(first: T, second: U): T & U {
  const result = <T & U>{};
  for (let id in first) {
    (<T>result)[id] = first[id];
  }
  for (let id in second) {
    if (!result.hasOwnProperty(id)) {
      (<U>result)[id] = second[id];
    }
  }

  return result;
}

正确示例应当使 T 和 U 均继承自 object 类型

jkchao commented 4 years ago

Playground,没有开启 strictNullChecks 是正常的。

不过你的代码,是个好的建议。

whinc commented 4 years ago

哦哦,我使用的是playground的默认设置(开启strict选项)