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的类型;