繁体   English   中英

编写 function 时出现类型错误:'string | 类型的参数未定义的'不可分配给'字符串'类型的参数。(2345)

[英]Getting a type error when writing a function: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.(2345)

我正在写一个 function 提取字符串的最后一个字符,然后将其转换为数字。 但是, TypeScript返回有关字符串可能为undefined的错误。 但是,鉴于我已经预定义了类型,这怎么可能呢?

type DogName = "dog1" | "dog2" | "dog3"

const parseDogNumber = (dogName: DogName): number => {
    const dogNumber = dogName.at(-1) // this returns a string
    const asInt = parseInt(dogNumber) // this returns a number
//                           ^^^^^
// Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
//   Type 'undefined' is not assignable to type 'string'.(2345)
     

    return asInt
}

我可以规避错误的一种方法是明确指定dogNumber的类型as string

const parseDogNumber2 = (dogName: DogName): number => {
    const dogNumber = dogName.at(-1) as string 
    const asInt = parseInt(dogNumber) // this returns a number
    return asInt
}

但是我仍然不明白为什么我首先会收到错误,即使我专门输入DogName ,没有为undefined留下空间。


TS游乐场在这里

这是因为当您使用String.prototype.at时, TypeScript 使用at方法的内置类型:

String.at(index: number): string | undefined

这意味着即使您 100% 确定它应该返回string ,TS 仍然认为它是string | undefined string | undefined

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM