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,在阅读了关于typescript的条件类型的这篇文章之后: 我正在尝试将条件类型应用于以下函数: function getIsoStringFromDatestamp<T extends number|undefined>( receivedAt:T ): T extends number ? string : undefined { if (typeof receivedAt === 'number') { return (new Date(receivedAt)

在阅读了关于typescript的条件类型的这篇文章之后:

我正在尝试将条件类型应用于以下函数:

function getIsoStringFromDatestamp<T extends number|undefined>(
  receivedAt:T
): T extends number ? string : undefined {
  if (typeof receivedAt === 'number') {
    return (new Date(receivedAt)).toISOString() // typeError [1]
  }
  return undefined // typeError [2]
}

const dateStamp:number|undefined = 1570081092848
console.log(getIsoStringFromDatestamp(dateStamp))  // 2019-10-03T05:38:12.848Z
根据我的理解,我对文章中的代码表示怀疑:

function process<T extends string | null>(
  text: T
): T extends string ? string : null {
  return text && text.replace(/f/g, 'p') // error [3]
}
const maybeFoo: string | null = 'foo'
console.log(process(maybeFoo).toUpperCase()) // POO

我错过了什么(

您必须键入返回值作为任何值。。如文章(评论部分)所述,这是一个悬而未决的问题

函数getIsoStringFromDatestamp(
收到日期:T
):T扩展数字?字符串:未定义{
如果(接收数据的类型=='number'){
return(新日期(receivedAt)).toISOString()如有
}
返回未定义的任意值
}
常数邮戳:编号|未定义=1570081092848
console.log(getIsoStringFromDatestamp(dateStamp))

您必须将返回值按任何方式进行类型转换。正如文章(评论部分)所述,这是一个悬而未决的问题

函数getIsoStringFromDatestamp(
收到日期:T
):T扩展数字?字符串:未定义{
如果(接收数据的类型=='number'){
return(新日期(receivedAt)).toISOString()如有
}
返回未定义的任意值
}
常数邮戳:编号|未定义=1570081092848
console.log(getIsoStringFromDatestamp(dateStamp))
function process<T extends string | null>(
  text: T
): T extends string ? string : null {
  return text && text.replace(/f/g, 'p') // error [3]
}
const maybeFoo: string | null = 'foo'
console.log(process(maybeFoo).toUpperCase()) // POO
// [3] Type 'string' is not assignable to type 'T extends string ? string : null'
function getIsoStringFromDatestamp<T extends number|undefined>(
  receivedAt:T
): T extends number ? string : undefined {
  if (typeof receivedAt === 'number') {
    return (new Date(receivedAt)).toISOString() as any
  }
  return undefined as any
}

const dateStamp:number|undefined = 1570081092848
console.log(getIsoStringFromDatestamp(dateStamp))