有人能帮我弄清楚下面代码中发生了什么吗:
// 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?
,则会出现预期的错误。
- 任何
String
实例都是一个对象,就像{}
一样,它的类型是typeof String
- TypeScript执行所谓的";鸭子打字";。这意味着所有属性/方法匹配的任何两个接口都是可互换的
link
是String
类型上的方法(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link),意味着bar
的接口是";duck-typed";以便与CCD_ 9可互换- CCD_ 10是而不是CCD_;duck-typed";可以互换