在typescript中使用泛型时获取错误消息

在typescript中使用泛型时获取错误消息,typescript,generics,Typescript,Generics,我在typescript的操场上收到了下面代码的错误消息 函数fn(x:T):M{ 返回[x]; } 我如何解决这个问题?我是否以错误的方式使用了泛型 对于简单的代码我很抱歉,我遇到的实际情况如下: type M<T> = { [key: string]: T }; function create<T>(names: string[], value: T): M<T> { return names.reduce((a: M<T>,

我在typescript的操场上收到了下面代码的错误消息

函数fn(x:T):M{
返回[x];
}
我如何解决这个问题?我是否以错误的方式使用了泛型

对于简单的代码我很抱歉,我遇到的实际情况如下:

type M<T> = { [key: string]: T };


function create<T>(names: string[], value: T): M<T> {
    return names.reduce((a: M<T>, c: string): M<T> => (a[c] = value, a), {} );
}
type M={[key:string]:T};
函数create(名称:string[],值:T):M{
返回names.reduce((a:M,c:string):M=>(a[c]=value,a),{});
}
我想将代码更改为:

function create<T, M = { [key: string]: T }>(names: string[], value: T): M {
    return names.reduce((a: M, c: string): M => (a[c] = value, a), {} );
}
函数创建(名称:string[],值:T):M{
返回names.reduce((a:M,c:string):M=>(a[c]=value,a),{});
}

您实际上不需要第二个类型参数:

function create<T>(names: string[], value: T): Record<string, T> {
    return names.reduce((a, c) => (a[c] = value, a), {} as Record<string, T>);
}
函数创建(名称:string[],值:T):记录{
返回names.reduce((a,c)=>(a[c]=value,a),{}作为记录);
}
**
记录
只是一个to
{[key:string]:T}


为什么需要第二个类型参数?只是
函数fn(x:T){return[x];}
真正的代码更复杂,我只是做了一个简单的例子,并在操场上运行了它。
function create<T>(names: string[], value: T): Record<string, T> {
    return names.reduce((a, c) => (a[c] = value, a), {} as Record<string, T>);
}