最近我看到了这样的代码(为了进行某种命名空间设置):
function f0() {
return "string";
}
function f1() {
return 4;
}
type F0 = typeof f0;
type F1 = typeof f1;
const first: F0 & { f1: F1 } = function() {
return "sample";
};
first.f1 = f1;
有趣的一点是,如果我们删除first.f1 = f1
行,则打字稿编译器会为f1
变量给出一个错误,并说
类型'()=>字符串'不能分配给类型'(()=>字符串)&{f1:()=>数字; }'。
似乎类型检查需要两个步骤,这有点像懒惰的类型检查! 我的问题是这怎么可能?
当我们无法使用基于object
的类型来做到这一点时,这会更有趣。例如,在以下代码中,它的类型检查系统会按预期引发错误
const second: { n1: number } & { n2: number } = { n1: 10 };
second.n2 = 8;
有人能详细说明这种行为的原因吗? (您也可以在此处查看并运行以上代码:https://codesandbox.io/s/react-playground-9chzq)