![](/img/trans.png)
[英]Typescript error TS2345 Error: TS2345:Argument of type 'Buffer' is not assignable to parameter of type 'string'
[英]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
留下空间。
这是因为当您使用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.