Typescript 类型';ClassA<;{id:number;name:string;}>';不可分配给类型';ClassA<;记录<;字符串,任意>&燃气轮机';

Typescript 类型';ClassA<;{id:number;name:string;}>';不可分配给类型';ClassA<;记录<;字符串,任意>&燃气轮机';,typescript,conditional-statements,typeerror,typescript-generics,Typescript,Conditional Statements,Typeerror,Typescript Generics,我有一个ClassA,它应该只允许对象作为值类型。但是应该可以将您自己的对象类型作为泛型类型传递。通过记录或{[key:string]:any}完成。 一切正常 但只要我尝试用一个简单的条件类型提取ClassA泛型类型 class ClassA<DataType = Record<string, any>>{ public data: { [key: string]: ClassB<DataType> }; constructor(){

我有一个ClassA,它应该只允许对象作为值类型。但是应该可以将您自己的对象类型作为泛型类型传递。通过
记录
{[key:string]:any}
完成。 一切正常

但只要我尝试用一个简单的条件类型提取ClassA泛型类型

class ClassA<DataType = Record<string, any>>{
    public data: { [key: string]: ClassB<DataType> };
    constructor(){
      this.data = {};
    }
}

type NonArrayType<T> = T extends ClassA<infer U> ? U[] : never;

// Test function to test the 'NonArrayType' type
export function useWithoutArray<X extends ClassA>(
  deps: X
): NonArrayType<X> {
  return '' as any; // Doesn't matter
}

// Drops type error
const test6 = useWithoutArray(new ClassA<{ id: number; name: string }>()); 
A类{
公共数据:{[key:string]:ClassB};
构造函数(){
this.data={};
}
}
类型NonArrayType=T扩展ClassA?U[]:从不;
//用于测试“NonArrayType”类型的测试函数
导出函数useWithoutArray(
副秘书长:X
):非数组类型{
将“”作为任意值返回;//不重要
}
//删除类型错误
const test6=useWithoutArray(new ClassA());
我得到一份工作

Type 'ClassA<{ id: number; name: string; }>' is not assignable to type 'ClassA<Record<string, any>>'.
类型“ClassA”不可分配给类型“ClassA”。
类型错误。从某种程度上讲,这是有道理的,但在理论上,
{id:number;name:string;}
记录

有线的东西是,它与一个缩小的例子在一个。。但不是在我的框架内

以下是实际问题:

谢谢

是固定的还是你的意思是别的?如果这个例子这么简单,没有提供一个最小的可重复的例子是很遗憾的,因为如果人们能看到错误的话,他们可以全力以赴。我不得不想象你的意思。无论如何,下面的代码没有编译错误

class ClassA<T, V extends Record<string,T> = Record<string,T>> {
  constructor(readonly value:V){}
}

type NonArrayType<T> = T extends ClassA<infer U> ? U[] : never;

// Test function to test the 'NonArrayType' type
export function useWithoutArray<T,X extends ClassA<T>>(
  deps: X
): NonArrayType<X> {
  return '' as any; // Doesn't matter
}

// Drops type error
const test6 = useWithoutArray(new ClassA<any, { id: number; name: string }>({id:3,name:"john"})); 
A类{
构造函数(只读值:V){}
}
类型NonArrayType=T扩展ClassA?U[]:从不;
//用于测试“NonArrayType”类型的测试函数
导出函数useWithoutArray(
副秘书长:X
):非数组类型{
将“”作为任意值返回;//不重要
}
//删除类型错误
const test6=useWithoutArray(新的ClassA({id:3,名称:“john”}));

请共享可复制的代码。收藏?是的,sry。。我的意思是“classA”是的。。问题是。。它在操场上工作(见问题,链接很长,需要粘贴)非常好。。但在我的框架中,它删除了错误和idk为什么。。您的示例根本不起作用,因为它返回any而不是
{id:number;name:string}[]
,但我想这是因为我没有正确描述这个问题。谢谢有时我有一个问题,如果我从某处随机拿起tsc,而不是使用我认为我是打字脚本版本。最近的版本编译了旧版本没有的东西。是的,当然。。也许值得一看。。我花了一些时间来配置这些,我将
ES2015
作为目标,并将
commonjs
用作moduleok。我找到了一个解决方法,只需指定
useWithoutArray
函数从
ClassA
ClassA
的值类型。。现在typescript很高兴