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>> {...}