Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能创建一个带有属性类型的接口,该属性类型会根据另一个属性而改变,而不需要在编译时显式地知道它?

有没有可能创建一个带有属性类型的接口,该属性类型会根据另一个属性而改变,而不需要在编译时显式地知道它?
EN

Stack Overflow用户
提问于 2020-04-07 22:06:15
回答 1查看 25关注 0票数 0

我希望能够根据对象的另一个属性推断对象的属性类型,而不必像newType那样声明T。而是声明newType并从属性推断T。如下所示:

代码语言:javascript
运行
AI代码解释
复制
export interface Action {
  type: K;
  payload: K extends "UPDATE_FIVE_DAY"
    ? {
        fiveDayForecast?: FiveDayForecast;
        fiveDayExpiresAt?: Moment;
        fiveDayLocationFor?: Location;
      }
    : K extends "UPDATE_LOADING"
    ? { loading: boolean }
    : K extends "UPDATE_LOCATION"
    ? { location: Location }
    : K extends "UPDATE_SETTINGS"
    ? { settings: Settings }
    : undefined;
}

我遇到的问题是变量K不存在,我可以这样设置它:

代码语言:javascript
运行
AI代码解释
复制
export interface Action<K extends 'UPDATE_FIVE_DAY' | 'UPDATE_LOADING' | ...etc

但是,我需要声明action.type的类型,我不一定知道。我想使用如下类型:

我想在一个通用的reducer中使用这个Action:

代码语言:javascript
运行
AI代码解释
复制
export default (state: State = initialState, action: Action): State => {
  switch (action.type) {
    case "UPDATE_LOADING":
      return {
        ...state,
        loading: action.payload,
      };
  }
});

然而,return语句抛出了一个类型错误,因为它认为action.payload可以是任何可能的返回类型。但事实并非如此。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 22:39:05

根据@shlang的建议,我设法使用有区别的联合来让它工作。

减速机:

代码语言:javascript
运行
AI代码解释
复制
export default (state: State = initialState, action: Actions): State => {
  switch (action.type) {
    case "UPDATE_LOADING":
      return {
        ...state,
        loading: action.payload.loading,
      };
   }
});

以及动作的类型:

代码语言:javascript
运行
AI代码解释
复制
export type Action = {
  type: AllActionTypes;
  payload: Partial<State> | undefined;
};

export type Actions =
  | UpdateFiveDayAction
  | UpdateLoadingAction;


export interface UpdateLoadingAction extends Action {
  type: "UPDATE_LOADING";
  payload: { loading: State["loading"] };
}


export interface UpdateFiveDayAction extends Action {
  type: "UPDATE_FIVE_DAY";
  payload: {
    fiveDayForecast: State["fiveDayForecast"];
    fiveDayExpiresAt: State["fiveDayExpiresAt"];
    fiveDayLocationFor: State["fiveDayLocationFor"];
  };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61090145

复制
相关文章
Excel公式技巧54: 在多个工作表中查找最大值/最小值
要在Excel工作表中获取最大值或最小值,我们马上就会想到使用MAX/MIN函数。例如,下图1所示的工作表,使用公式:
fanjy
2020/09/17
12.5K0
Excel公式技巧54: 在多个工作表中查找最大值/最小值
较快速在一个数组中查找最大值和最小值
#include<stdio.h> #define MAX 100001 int a[MAX]; int n; /* 时间复杂度为3*n/2 */ void swap(int i) { if(i==n-1) return ; if(a[i]>a[i+1]) { int temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } void sort() { int i; for(i=0;i<n;i++) { swap(i); i++; }
chain
2018/08/02
3.9K0
较快速在一个数组中查找最大值和最小值(2)
/*分治法*/ #include<iostream> #include<string> #include<vector> #include<fstream> using namespace std; int a[16]={1,3,5,7,9,11,14,2,4,6,8,10,12,14,16,18}; int b[9]={3,1,5,9,4,2,7,6,10}; int t[2]; vector<string> splitEx(const string& src, string separate_chara
chain
2018/08/02
2.7K0
Java 查找 List 中的最大值、最小值Java 查找 List 中的最大值、最小值
Java 查找 List 中的最大值、最小值 java> List<Long> list = new ArrayList(); java.util.List<java.lang.Long> list = [] java> list.add(1L) java.lang.Boolean res1 = true java> list.add(2L) java.lang.Boolean res2 = true java> Collections.max(list) java.lang.Long res3 = 2 j
一个会写诗的程序员
2018/08/17
4.3K0
在函数中的局部程序(像是比局部变量还局部的部分)
我们都知道局部变量是在一个函数内部定义的变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。在一个函数内部定义的变量只在本函数范围内有效,也就是只有本函数内才能引用它们,在此函数外不能使用这些变量。在复合语句内定义的变量只能在本复合语句范围内有效,只有本复合语句内才能引用他们,在该复合语句外不能使用这些变量。还有就是函数的形参,只在该函数内有效。而全局变量的有效范围为从定义变量的位置开始到本源文件结束。 但还有一种形式的局部变量不是以函数为限制,而是以
跋扈洋
2021/02/02
1.1K0
在函数中的局部程序(像是比局部变量还局部的部分)
折半查找部分有序
部分有序 本周qq群有人咨询 Search in Rotated Sorted Array 来源: https://leetcode.com/problems/search-in-rotated-sorted-array/ 难度:Difficulty: Hard 题目 Suppose a sorted array is rotated(旋转的) at some pivot unknown to you beforehand(提前的) eg: 0 1 2 3 4 5 6 7 旋转3个might beco
早起的鸟儿有虫吃
2018/04/13
6820
折半查找部分有序
其他部分~~~~选看即可
【源码】Word转PDF V1.0.1 小软件,供新手参考 昨天有一朋友让我帮忙找一款Word转PDF的软件,今天自己捣鼓出点成果封装个Helper供大家使用~ 开源地址:https://githu
逸鹏
2018/04/09
5380
其他部分~~~~选看即可
【python opencv】直方图查找、绘制和分析
那么直方图是什么?您可以将直方图视为图形或绘图,从而可以总体了解图像的强度分布。它是在X轴上具有像素值(不总是从0到255的范围),在Y轴上具有图像中相应像素数的图。
西西嘛呦
2020/08/26
1.3K0
【python opencv】直方图查找、绘制和分析
cgroup其他部分 IO + hugepage
cgroup还有其他一些限制特性,如io,pid,hugetlb等,这些用处不多,参见Cgroupv1。下面介绍下与系统性能相关的io和hugepage,cgroup的io介绍参考Cgroup - Linux的IO资源隔离
charlieroro
2020/03/24
1.1K0
cgroup其他部分 IO + hugepage
redis的使用和安装,redis基础和高级部分
在后端开发中,为了提高性能,对于一些经常查询但是又不太变化的内容会使用redis,比如前端的列表展示项等,如果数据有变化也可以清空缓存,让前端查一次数据库,所以使用redis相对高效和灵活.本文主要对于redis在linux上的使用和安装进行说明。 1.redis的安装 2.redis常用的命令 3.在阿里云上面安装redis 4.在vwmare上安装redis 5.利用jedis连接redis进行存入和输出 6.redis的高可用,哨兵机制,主从复制(安装三台redis服务器,一台主redis) 7.re
编程软文
2018/06/20
1K0
恼人的部分匹配查找
这天有空,小范照常开始了Excel的研习。俗话说,一天不练,手生脚慢;两天不练,功夫减半;三天不练,成了门外汉。对于自己热爱的Excel,小范从不马虎。
fanjy
2021/10/15
1.9K0
05:最大值和最小值的差
05:最大值和最小值的差 总时间限制:1000ms内存限制:65536kB描述 输出一个整数序列中最大的数和最小的数的差。 输入第一行为M,表示整数个数,整数个数不会大于10000; 第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000。输出输出M个数中最大值和最小值的差。样例输入 5 2 5 7 4 2 样例输出 5 #include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> u
attack
2018/04/03
2.9K0
Excel公式技巧55:查找并获取最大值/最小值所在的工作表
在《Excel公式技巧54:在多个工作表中查找最大值最小值》中,我们在MAX/MIN函数中使用多工作表引用来获取最大值/最小值。现在更进一步,我们想要获取最大值/最小值所在的工作表名称。
fanjy
2020/09/25
2.9K0
Excel公式技巧55:查找并获取最大值/最小值所在的工作表
cad怎么删除不需要的部分_cad怎样打印局部图
3、此时会看到蓝色线和紫色线还是多余,我们度选择删除工具,cad删除工具快捷键是e
全栈程序员站长
2022/09/19
2K0
cad怎么删除不需要的部分_cad怎样打印局部图
一个数组中找最大值和最小值
这个不是lintcode里的题目,但是感觉很经典,放在这里。 给定一个数组,在这个数组中找到最大值和最小值。 最近在看一点算法书,看到分治法经典的金块问题,实质就是在一个数组中找到最大值和最小值的问题。 我们用分治法来做,先把数据都分成两两一组,如果是奇数个数据就剩余一个一组。 如果是偶数个数据,就是两两一组,第一组比较大小,分别设置为max和min,第二组来了自己本身内部比较大小,用大的和max进行比较,决定是否更新max,小的同样处理,以此类推。 如果是奇数个数据,就把min和max都设为单个的那个数据,其他的类似上面处理。 书上说可以证明,这个是在数组中(乱序)找最大值和最小值的算法之中,比较次数最少的算法。 瞄了一眼书上的写法,还是很简单的,一遍过。
和蔼的zhxing
2018/09/04
2.7K0
ARKit和CoreLocation:第一部分
演示代码 ARKit和CoreLocation:第一部分 ARKit和CoreLocation:第二部分 ARKit和CoreLocation:第三部分
iOSDevLog
2018/09/20
2.4K0
ARKit和CoreLocation:第一部分
部分和问题(DFS)
题意:给定整数a1,a2,a3,a4,a5,an。判断是否可以从中选出若干数,使它们的和恰好为k。
杨鹏伟
2020/09/14
9020
Python操控Excel:使用Python在主文件中添加其他工作簿中的数据
本文介绍使用Python向Excel主文件添加新数据的最佳方法。该方法可以保存主数据格式和文件中的所有内容。
fanjy
2022/11/16
8.5K0
Python操控Excel:使用Python在主文件中添加其他工作簿中的数据
【PTA】交换最小值和最大值 (15分)
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
Regan Yue
2021/09/16
1.7K0
hive 获取数组的最大值和最小值
select exploded_column,XXXX.column2 from XXXX LATERAL VIEW explode(XXXX.column1) t1 as exploded_column
week
2022/01/07
5.2K0

相似问题

Mysql错误“无法连接,因为目标机器主动拒绝它。”

15

ConnectionRefusedError无法连接,因为目标机器主动拒绝它

110

Mysql Python连接器无法连接,因为目标机器主动拒绝它

14

Delphi mORMot无法连接,因为目标机器主动拒绝它

11

django south:“无法连接,因为目标机器主动拒绝它。”

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档