在打字稿手册模板文字类型中,它说:
对于模板文字中的每个插值位置,并集被交叉相乘:
Run Code Online (Sandbox Code Playgroud)type AllLocaleIDs = `${EmailLocaleIDs | FooterLocaleIDs}_id`; type Lang = "en" | "ja" | "pt"; type LocaleMessageIDs = `${Lang}_${AllLocaleIDs}`;
然后它说:
我们通常建议人们对大型字符串联合使用提前生成,但这在较小的情况下很有用。
但什么是“超前一代”?最后一段是什么意思?我不太明白,因为他没有举例。
正如 React 文档提到的:
如果 ref 回调被定义为内联函数,则在更新期间它将被调用两次,第一次使用 null,然后再次使用 DOM 元素。这是因为每次渲染都会创建该函数的新实例,因此 React 需要清除旧的引用并设置新的引用。
我可以理解设置el
为null
,因为我们需要在重新渲染后释放旧 dom 节点的内存。但是,有两个问题我仍然无法弄清楚。
null
?难道它不能用新的 dom 节点调用较新的 ref 回调吗?下面是这个现代 JavaScript 教程的代码片段:
let group = {
title: "Our Group",
students: ["John", "Pete", "Alice"],
showList() {
this.students.forEach(
student => alert(this.title + ': ' + student)
);
}
};
group.showList();
Run Code Online (Sandbox Code Playgroud)
本教程尝试this
用箭头函数进行解释,它说:
这里的forEach中,使用了箭头函数,因此
this.title
与外部方法showList中的完全相同。即:group.title。
我们知道this
箭头函数是按词法确定的。所以作用域链应该是:
global--> showList-->forEach-->arrow function
Run Code Online (Sandbox Code Playgroud)
在这种情况下,箭头函数的外部作用域应该forEach
代替showList
。因此this
in 箭头函数与 in 完全相同forEach
,这应该是undefined
因为没有thisArg
传递 to forEach
。但事实上,this
是group
,这意味着它与 中完全相同showList
。那么,在这种情况下似乎forEach
没有范围?我很困惑。
根据交集的定义,几种类型的交集应该产生一个类型,该类型的属性对于所有类型来说都是公共的。例如,如果我们有:
type o1 = {a: string, b: string}
type o2 = {a: string, c: string}
type o3 = o1 & o2
Run Code Online (Sandbox Code Playgroud)
theno3
应该是一个仅具有属性的类型,a
因为是和a
的公共属性。然而,我们实际上得到的是一个具有属性、和 的类型。在这种情况下,交集类型的行为似乎并不像其名称所显示的那样。它的作用更像是所有类型的组合。那么交叉口类型真的与交叉口有关吗?如果不是,为什么我们称其为交集类型而不是组合类型或其他名称?o1
o2
a
b
c