如何在函数参数中指定通用键约束

时间:2019-05-29 16:34:26

标签: javascript typescript

我可能会走错路,我只是想今天在代码中获得一点乐趣。我确定图书馆也已经这样做了。

我正在创建一个通用的.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}函数,该函数根据键确定被推入数组的新对象是否唯一,如果是,则将其推入。

到目前为止,我只知道了由于明显原因而无法使用的伪代码:

ActiveCell.EntireRow.AutoFit

如何获取键的对象名称并将其指定给findIndex函数?


编辑:

在Titian Cernicova-Dragomir的帮助下,这是我目前的最终解决方案,非常适合我的POC需求!

pushUnique

1 个答案:

答案 0 :(得分:1)

您可以传入键入为keyof T的密钥,这意味着它必须是传入的T的密钥,然后您可以使用索引访问来获取值:

class Util {
    pushUnique<T>(arr: T[], obj: T, key: keyof T) {
        if (key !== null) {
            const index = arr.findIndex(o => o[key] === obj[key]);
        }
    }
}

new Util().pushUnique([{a: 1}], {a :2 }, "a")
new Util().pushUnique([{a: 1}], {a :2 }, "b") //err

您也可以使用函数代替keyof,但这是JS / TS的处理方式:

class Util {
    pushUnique<T, U>(arr: T[], obj: T, key: (o: T) => U) {
        if (key !== null) {
            const index = arr.findIndex(o => key(o) === key(o));
        }
    }
}

new Util().pushUnique([{a: 1}], {a :2 }, o => o.a)
new Util().pushUnique([{a: 1}], {a :2 }, o => o.b) //err