TS 不会给出错误,并且在将字符串分配给空对象时不一致



有人能帮我弄清楚下面代码中发生了什么吗:

// no error
const quz: {} = "abc"
// no error
const bar: {
link?: any;
} = ""
//Type '""' has no properties in common with type '{ buz?: any; }'.
const foo: {
buz?: any;
} = ""

游乐场链接:点击我

我认为这三个都会出错,但只有最后一个会出错。最令人惊讶的是,如果在第二个示例中将link?属性更改为links?,则会出现预期的错误。

  1. 任何String实例都是一个对象,就像{}一样,它的类型是typeof String
  2. TypeScript执行所谓的";鸭子打字";。这意味着所有属性/方法匹配的任何两个接口都是可互换的
  3. linkString类型上的方法(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link),意味着bar的接口是";duck-typed";以便与CCD_ 9可互换
  4. CCD_ 10是而不是CCD_;duck-typed";可以互换

最新更新