打字稿相交类型中的延迟分配和延迟类型检查

时间:2020-01-30 21:02:45

标签: typescript

最近我看到了这样的代码(为了进行某种命名空间设置):

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

0 个答案:

没有答案