基于JavaScript的灵活性(不严谨)万物皆对象,很经典的例子就是一个函数可以拥有自己的属性,和自己的方法。即一个函数可以当作函数来用,也可以当作一个对象来用。
    8.JS中万物皆对象 你甚至可以给函数添加方法
    TS接口中也能做到一些很熵增的,混乱的集合体,即混合类型的接口。
    之前我们学习了描述一般对象的接口,描述函数的接口,描述可索引对象的接口,描述类的构造函数的接口等等。现在我们能让一个对象 同时具有 上面提到的 多种类型
    用上例就是,一个对象可以同时做为函数、对象、数组使用,并带有额外的属性:

    1. interface Counter {
    2. (start: number): string;
    3. interval: number;
    4. reset(): void;
    5. [propName: `${any}`]: any
    6. }
    7. function getCounter(): Counter {
    8. let counter = <Counter>function (start: number) { };
    9. counter.interval = 123;
    10. counter.reset = function () { };
    11. return counter;
    12. }
    13. let c = getCounter();
    14. c(10); // 函数
    15. c.reset(); // 对象的方法
    16. c.interval = 5.0; // 对象的属性
    17. c[2] = 5 // 伪数组
    18. c['3'] = 3
    19. console.log(c)

    现在这个变量就是一个梦魇融合怪。
    image.png