咱们能够先来看一下源码是什么

/** * Construct a type with a set of properties K of type T */type Record<K extends keyof any, T> = {    [P in K]: T;};

能够把K类型转化为T类型。
也就相当于一个K到T的映射表,能够依据传入的K值去查表返回对用的T值。
而他的模式就是把K当作键值来获取T。
咱们天经地义能够只是简略的减少对应关系,只实现将输出key值,输入相应对象的简略操作:
demo1:

interface EmployeeType {    id: number    fullname: string    role: string} let employees: Record<number, EmployeeType> = {    0: { id: 1, fullname: "John Doe", role: "Designer" },    1: { id: 2, fullname: "Ibrahima Fall", role: "Developer" },    2: { id: 3, fullname: "Sara Duckson", role: "Developer" },} // 比方咱们想获取1对应的Employee,employees[1]  => { id: 2, fullname: "Ibrahima Fall", role: "Developer" }

然而咱们更多的应用这种办法去依据输出调用相应解决办法,使代码更加标准。
比方咱们有三种角色,某个办法要求当传入不同角色时进行不同解决,然而办法可能比较复杂,咱们想方便管理并且想尽可能的简洁(不采纳大量ifElse),咱们就能够采纳如下形式。
demo2:

userRole = {admin: "admin",student: "student",teacher: "teacher"}interface handeler{    getKey();    handel();}@injectableclass adminHandeler implement handeler{    getKey(): string{        return userRole.admin;    }    handel(){        . . .    }}. . .mainClass {    private handelers = {} as Record<string, handeler>;    construct( @inject adminHandeler adminHandeler){        this.addHandeler(adminHandeler);    }        //假如这个办法中传入了role值并且须要进行分类解决    mainFunction(role: string){        // 查找相应key并进行解决,执行对应办法        handelers[role].handel();    }        addHandeler(handeler: handeler) {        const key = handeler.getKey();        if(handelers[key]) {            // 以后key已增加相应映射            return;        }        // 如果没有相应映射则增加映射        handelers[key] = handeler;    }}