angular - 你如何在 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。有谁知道如何做这样的事情?
解决方案
只需在与其参数推理上下文相对应的适当级别声明类型参数,即可获得所需的推理
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);
推荐阅读
- python-3.x - 拉伸子图 Matplotlib
- r - glm 的系数
- python - 如何将任意位置的对象正确插入现有查询集并按顺序更新顺序?
- python - python中的有效分布总和-卷积-
- javascript - 返回不适用于 JS,但 console.log 可以
- kubernetes - kubectl 和 GKE (Google Kubernetes Engine) 未经授权的问题
- python - 在 Python 中只匹配一组字符中的一个字符
- r - 如何在不按字母顺序的情况下在ggplot2中每月订购
- excel - 如何从另一个单元格引用单元格引用(这会导致另一个工作表单元格引用)
- vb.net - 创建指向文件服务器的链接并将其放入文本框中