核心内容摘要
八重神子“焊”出白水?解密奇幻传说中的“解绑”之道
上一节我们讲了可接口中可选属性的用法那么现在想这样一个问题小的时候我们看超人超人可以做任何事情。
不仅限于帮助人帮助动物帮助植物.....因为这些种类都有不同的“属性”我们不可以局限于某个属性那么这里我们也是可以有办法的。
interface IAnyObj { [prop: string]: any; } class SuperMan { public doAnyThing(anyObj: IAnyObj): void { console.log(超人做任何事情 , anyObj); } } let superMan new SuperMan(); superMan.doAnyThing({ age: 999 }); superMan.doAnyThing({ name: 任何人 }); superMan.doAnyThing([99, 55]);tsc index.ts在这里我们定义了IAnyObj的接口这里的[prop: string]: any;表示包含“任意字符串类型”的属性的事物都可以传递到doAnyThing的方法中。
最后的那个数组有点例外其实访问的时候他也会进行转换把索引按照字符串来读取。
其实这涉及到一个动态属性的问题。
比如传递过来的数据你不确定这个数据都有哪些属性那么就可以用下面的方法进行访问interface IAnyObj { [prop: string]: any; } class SuperMan { public doAnyThing(anyObj: IAnyObj): void { // console.log(超人做任何事情 , anyObj); let keys Object.keys(anyObj); if (keys.length) { for (let i 0; i keys.length; i) { console.log( 访问的属性 , keys[i], 对应的值为 , anyObj[keys[i]] ); } } } } let superMan new SuperMan(); superMan.doAnyThing({ age: 999 }); superMan.doAnyThing({ name: 任何人 }); superMan.doAnyThing([99, 55]); let arr [99, 55]; console.log(arr[0]);