typescript条件类型不起作用
在阅读了关于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)
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))