基于JavaScript的灵活性(不严谨)万物皆对象,很经典的例子就是一个函数可以拥有自己的属性,和自己的方法。即一个函数可以当作函数来用,也可以当作一个对象来用。
8.JS中万物皆对象 你甚至可以给函数添加方法
TS接口中也能做到一些很熵增的,混乱的集合体,即混合类型的接口。
之前我们学习了描述一般对象的接口,描述函数的接口,描述可索引对象的接口,描述类的构造函数的接口等等。现在我们能让一个对象 同时具有 上面提到的 多种类型。
用上例就是,一个对象可以同时做为函数、对象、数组使用,并带有额外的属性:
interface Counter {(start: number): string;interval: number;reset(): void;[propName: `${any}`]: any}function getCounter(): Counter {let counter = <Counter>function (start: number) { };counter.interval = 123;counter.reset = function () { };return counter;}let c = getCounter();c(10); // 函数c.reset(); // 对象的方法c.interval = 5.0; // 对象的属性c[2] = 5 // 伪数组c['3'] = 3console.log(c)
现在这个变量就是一个梦魇融合怪。
