Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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中的自引用函数?_Typescript - Fatal编程技术网

TypeScript中的自引用函数?

TypeScript中的自引用函数?,typescript,Typescript,我想知道如何定义defaultEncoder参数的类型。它具有与函数本身相同的参数 const paramsSerializer=(params:params)=>{ 常数编码器=( str:string, 默认编码器:任何, 字符集:字符串, 类型:字符串 ) => { const encodedStr=defaultEncoder(str,defaultEncoder,字符集,类型); 返回transformEncodedStr(encodedStr) }; 返回transformParam

我想知道如何定义
defaultEncoder
参数的类型。它具有与函数本身相同的参数

const paramsSerializer=(params:params)=>{
常数编码器=(
str:string,
默认编码器:任何,
字符集:字符串,
类型:字符串
) => {
const encodedStr=defaultEncoder(str,defaultEncoder,字符集,类型);
返回transformEncodedStr(encodedStr)
};
返回transformParams(params,{encoder});
}
如果我每次都定义
defaultEncoder
,它将是一个无限的类型序列

defaultEncoder:(
str:string,
编码器:(
str:string,
等等。。。
字符集:字符串,
类型:“键”|“值”
)=>任何,
字符集:字符串,
类型:“键”|“值”
)=>任何,

正如jonrsharpe在他的评论中所说的,您应该将类型提取到一个类型别名,以递归地使用它:

类型编码器=(
str:string,
defaultEncoder:Encoder,
字符集:字符串,
类型:字符串
)=>字符串;
然后您可以在编码器功能中使用它:

const paramsSerializer=(params:params)=>{
常数编码器=(
str:string,
defaultEncoder:Encoder,//此处
字符集:字符串,
类型:字符串
) => {
const encodedStr=defaultEncoder(str,defaultEncoder,字符集,类型);
返回transformEncodedStr(encodedStr)
};
返回transformParams(params,{encoder});
}
为了简化,您可以在函数定义本身中使用
编码器
类型:

const paramsSerializer=(params:params)=>{
常量编码器:编码器=(str,defaultEncoder,字符集,类型)=>{
const encodedStr=defaultEncoder(str,defaultEncoder,字符集,类型);
返回transformEncodedStr(encodedStr)
};
返回transformParams(params,{encoder});
}

如果您提取类型:@jornsharpe非常感谢。我不知道我可以在自己的类型定义中使用相同的类型。也许你们可以把它作为一个答案,这样我就可以接受了。若你们这样做,
const-encoder:encoder=…
你们不需要重复所有类型的参数。是的,这也是一个选项。它不仅仅是一个“选项”;它实际上让编译器检查函数是否是一个
编码器
,特别有用,因为它包含了在其他方面遗漏的返回类型。