typescript-接口的基本使用(三)

上一节我们讲了可接口中可选属性的用法,那么现在想这样一个问题,小的时候,我们看超人,超人可以做任何事情。不仅限于帮助人,帮助动物,帮助植物.....因为这些种类都有不同的"属性",我们不可以局限于某个属性,那么,这里我们也是可以有办法的。

TypeScript 复制代码
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的方法中。最后的那个数组有点例外,其实访问的时候,他也会进行转换,把索引按照字符串来读取。其实这涉及到一个动态属性的问题。

比如传递过来的数据,你不确定这个数据都有哪些属性,那么就可以用下面的方法进行访问

TypeScript 复制代码
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"]);
相关推荐
打小就很皮...5 小时前
《在 React/Vue 项目中引入 Supademo 实现交互式新手指引》
前端·supademo·新手指引
C澒5 小时前
系统初始化成功率下降排查实践
前端·安全·运维开发
摘星编程5 小时前
React Native + OpenHarmony:自定义useFormik表单处理
javascript·react native·react.js
C澒5 小时前
面单打印服务的监控检查事项
前端·后端·安全·运维开发·交通物流
pas1365 小时前
39-mini-vue 实现解析 text 功能
前端·javascript·vue.js
qq_532453535 小时前
使用 GaussianSplats3D 在 Vue 3 中构建交互式 3D 高斯点云查看器
前端·vue.js·3d
Swift社区6 小时前
Flutter 路由系统,对比 RN / Web / iOS 有什么本质不同?
前端·flutter·ios
2601_949833396 小时前
flutter_for_openharmony口腔护理app实战+我的实现
开发语言·javascript·flutter
雾眠气泡水@6 小时前
前端:解决同一张图片由于页面大小不统一导致图片模糊
前端
开发者小天6 小时前
python中计算平均值
开发语言·前端·python