首页 > 解决方案 > 你如何在 TypeScript 中使用泛型的某些部分?

问题描述

我确信有办法做到这一点,但我不太确定我将如何去做。我们有一个名为 的方法createActions,它接受一个对象类型和一个字符串作为键。

function createActions<T, Tkey extends string>(key: Tkey) {
    return function(obj: T) {
        return {[key]: obj}
    }
}

我希望能够推断出 Tkey - 但是,T应该为良好的打字定义。用例使我可以访问开发人员以类型良好的方式定义的任何属性。换句话说,如果提供的键是a,createActions('a')({}).b将抛出编译器错误,因为b在 type 上不存在{a: {}}

这是对实际实现的一点推断,可以在这里找到:https ://github.com/CaliStyle/ngrx-poly/blob/master/src/app/ngrx-poly/actions/depth-one-行动地图.ts。有谁知道如何做这样的事情?

标签: angulartypescript

解决方案


只需在与其参数推理上下文相对应的适当级别声明类型参数,即可获得所需的推理

function createActions<Tkey extends string>(key: Tkey) {
    return function<T>(obj: T) {
        return {[key]: obj};
    };
}

const createPerson = createActions('person');

const hasPerson = createPerson({name: 'Robert', id: 1});

console.log(hasPerson.person.name);

游乐场链接


推荐阅读