Typescript 使用泛型数组的必需和部分

Typescript 使用泛型数组的必需和部分,typescript,Typescript,我有以下几种: interface Color { color: string } type DarkerColor<T> = T & Color & { darker: string } type ColorInfo<T> = DarkerColor<T> & { hue: number luminance: number opacity?: number } 但我得到了同样的错误: Type 'T &

我有以下几种:

interface Color {
  color: string
}

type DarkerColor<T> = T & Color & { darker: string }

type ColorInfo<T> = DarkerColor<T> & {
  hue: number
  luminance: number
  opacity?: number
}
但我得到了同样的错误:

Type 'T & Color & { darker: string; } & { hue: number; luminance: number; opacity: number; }' is not assignable to type 'Required<ColorInfo<T>>'.
Type'T&Color&{darker:string;}&{hue:number;亮度:number;不透明度:number;}不能分配给Type'Required'。
问题出在哪里?

如中所述

不能修改泛型扩展类型。 一种可能的解决方案是使部分类型位于扩展类型的外部。 以防您需要一个可以工作的分部类型

interface Color {
  color: string
}

type DarkerColor<T> = T & Color & { darker: string }

type ColorInfo<T> = DarkerColor<T> & Partial<{
  hue: number
  luminance: number
  opacity: number
}>


function computeDarkerColor<T extends Color>(dataset: T[]): Array<DarkerColor<T>> {...}
function computeHueAndLuminance<T extends Color>(value: Array<DarkerColor<T>>): Array<ColorInfo<T>> {...}
function computeOpacity<T extends Color>(value: Array<ColorInfo<T>>): Array<ColorInfo<T>> {...}

界面颜色{ 颜色:字符串 } 键入DarkerColor=T&Color&{darker:string} 类型ColorInfo=深颜色和局部颜色 函数computeDarkerColor(数据集:T[]):数组{…} 函数computeHueAndLuminance(值:数组):数组{…} 函数computeOpacity(值:数组):数组{…} 但是,要解决这两个几乎相同的类型的问题,您可以使用可选类型或任何类型的组合,例如省略

省略: 界面颜色{ 颜色:字符串 } 键入DarkerColor=T&Color&{darker:string} 类型ColorInfo=深颜色&{ 色调:号码 亮度:数字 不透明度:数字 } 函数computeDarkerColor(数据集:T[]):数组{…} 函数computeHueAndLuminance(值:数组):数组{…} 函数computeOpacity(值:数组):数组{…}
我认为您向不透明性传递了一个数字,而不是typescript编译器建议的可选字符串。@AntoineRaoulIscaros很抱歉,这是一个输入错误,错误仍然存在。您能展示一下如何使用部分吗?@AntoineRaoulIscaros当然!我编辑了主要问题“谢谢你,安托万”的可能副本,但这样做我无法区分具有
opacity
和不具有
opacity
的类型,对吗?
Type 'T & Color & { darker: string; } & { hue: number; luminance: number; opacity: number; }' is not assignable to type 'Required<ColorInfo<T>>'.
interface Color {
  color: string
}

type DarkerColor<T> = T & Color & { darker: string }

type ColorInfo<T> = DarkerColor<T> & Partial<{
  hue: number
  luminance: number
  opacity: number
}>


function computeDarkerColor<T extends Color>(dataset: T[]): Array<DarkerColor<T>> {...}
function computeHueAndLuminance<T extends Color>(value: Array<DarkerColor<T>>): Array<ColorInfo<T>> {...}
function computeOpacity<T extends Color>(value: Array<ColorInfo<T>>): Array<ColorInfo<T>> {...}

interface Color {
  color: string
}

type DarkerColor<T> = T & Color & { darker: string }

type ColorInfo<T> = DarkerColor<T> & {
  hue: number
  luminance: number
  opacity: number
}


function computeDarkerColor<T extends Color>(dataset: T[]): Array<DarkerColor<T>> {...}
function computeHueAndLuminance<T extends Color>(value: Array<DarkerColor<T>>): Array<Omit<ColorInfo<T>, 'opacity'>> {...}
function computeOpacity<T extends Color>(value: Array<ColorInfo<T>>): Array<ColorInfo<T>> {...}