Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 类型';T';不可分配给类型';字符串';_Typescript_Typescript3.0 - Fatal编程技术网

Typescript 类型';T';不可分配给类型';字符串';

Typescript 类型';T';不可分配给类型';字符串';,typescript,typescript3.0,Typescript,Typescript3.0,问题是:我想创建一个函数,该函数获取一个参数并返回相同的类型 我举了一个最简单的例子: type Test=(arg:T)=>T; 常量测试:测试=(arg:string)=>arg; 这个简单的类型测试函数实现抛出错误“类型'T'不可分配给类型'string'” 有人能解释一下为什么在不使用模板参数中的道具时会发生此错误吗?实际上有这样一个答案:Test是一种泛型类型。您的定义不符合泛型类型,因为无法将T分配给string。您应该能够使用test(num)并使其工作,但如果arg是一个字符串

问题是:我想创建一个函数,该函数获取一个参数并返回相同的类型

我举了一个最简单的例子:

type Test=(arg:T)=>T;
常量测试:测试=(arg:string)=>arg;
这个简单的类型测试函数实现抛出错误“类型'T'不可分配给类型'string'”

有人能解释一下为什么在不使用模板参数中的道具时会发生此错误吗?

实际上有这样一个答案:
Test
是一种泛型类型。您的定义不符合泛型类型,因为无法将
T
分配给
string
。您应该能够使用
test(num)
并使其工作,但如果
arg
是一个字符串,则这将是不兼容的

不过,您可以将类型设置为泛型。这将允许您在声明函数类型时缩小类型范围

type Test<T> = (arg: T) => T;
const test<string> = arg => arg; //arg is a string;
type Test=(arg:T)=>T;
常量测试=arg=>arg//arg是一个字符串;

谢谢你的回答。 问题是,我必须让模板自己解决,所以我只是在没有指定类型的情况下创建了函数,它也工作得很好

type Test=(arg:T)=>T;
常量测试:测试=(arg)=>arg;
这里是我正在处理的原始函数:

类型VariableReducer=(
数组:{label:string;value:T}[],
变量:只读|未定义,
键:字符串,
)=>{label:string;value:T}[];
常量defaultVariableReducer:VariableReducer=(a,v)=>
(v!==未定义和&v.name!==未定义
?[…a,{label:editorLabel(v),value:v.name}]
:a)作为a的类型;