递归的对象

我们来看一段代码:

  1. let foo:any = {};
  2. let bar = {
  3. foo
  4. }
  5. foo.bar=bar;

将上述代码在chrome控制台打印,如下图所示,我们会发现它是一个递归的对象,即能够无线地 foo.bar.foo.bar……
[资料] 递归的对象 - 图1
当我们在编码的过程中遇到类似场景,我们期望的体验是编辑器能够一直有代码提示,但是实际上我们输入 foo. 之后 VSCode 并没有给出提示。
当遇到这类场景的时候,我们就需要用到 interface 来声明递归结构。如下:

interface Foo {
    bar: {
        foo: Foo
    }
}
let foo: Foo;
let bar = {
    foo
}
foo.bar = bar;

这个时候 VSCode 就会按照预期进行正确的代码提示,如下图:
[资料] 递归的对象 - 图2

MMO补充

这种写法没有代码提示
image.png
这种写法有代码提示
image.png