Javascript 从JS切换到TS时,类型错误上不存在属性
您好,为了更好地编码,我最近决定从JS切换到TS,但是我从TypeScript中得到了这些错误,Javascript 从JS切换到TS时,类型错误上不存在属性,javascript,typescript,Javascript,Typescript,您好,为了更好地编码,我最近决定从JS切换到TS,但是我从TypeScript中得到了这些错误,Validate函数在JavaScript中工作得非常好 Property 'user' does not exist on type '{ isValid: boolean; user: string; userLowercase: string; } | undefined' Property 'userLowercase' does not exist on type '{ isValid: b
Validate
函数在JavaScript中工作得非常好
Property 'user' does not exist on type '{ isValid: boolean; user: string; userLowercase: string; } | undefined'
Property 'userLowercase' does not exist on type '{ isValid: boolean; user: string; userLowercase: string; } | undefined'
这些是文件
//functions.ts
function Validate(arg) {
if (!arg) return
let query :string = arg.toString().replace("@", "")
let regex = /^[a-zA-Z0-9._-]+$/
let isValid = regex.test(query)
if (!isValid) return
let userLowercase :string = query.toLowerCase()
return { isValid: true, user : query, userLowercase }
}
//firstCommand.ts
import { Validate } from './functions'
class firstCommand extends Commands {
async command() {
if (!Validate(this.arg)) return
const { user, userLowercase } = Validate(this.arg)
///
}
}
我在谷歌上搜索过,但似乎没有人有同样的问题?
我写的代码是不是写错了?我该如何解决这个问题
非常感谢你 此错误告诉您出了什么问题:
Property 'user' does not exist on type
'{ isValid: boolean; user: string; userLowercase: string; } | undefined'
注意最后一位|未定义
。这意味着您的变量类型可能是您期望的值,也可能是未定义的
。如果该值实际上是未定义的
,则程序将在此崩溃
问题在于您的Validate()
函数。它有这样一行:
if (!arg) return
if (!isValid) return
这一行:
if (!arg) return
if (!isValid) return
因此,如果arg
或isValid
为false,则函数返回undefined
。它只在通过那些早期返回语句时返回完整对象
这意味着函数的返回类型为:
{ isValid: boolean; user: string; userLowercase: string; } | undefined
要解决此问题,必须先测试该值是否存在,然后才能将其视为存在
const validationResult = Validate(this.arg)
if (validationResult) {
const { user, userLowercase } = validationResult
// proceed...
}
Typescript会注意到您检查了变量是否存在,并允许您从
if
语句内部继续操作。该值可以是未定义的。上没有未定义的属性。在处理之前检查它是否是未定义的。这似乎是完全合乎逻辑的解释,但当我在代码中尝试它时,它仍然提示我错误。我试图从Validate
函数中删除一些重复的和不必要的代码,但似乎不起作用。对不起,我的答案有误。请注意,使用的变量必须是选中的变量const{user,userLowercase}=validationResult
噢,好吧!现在一切正常!不管我之前的评论是什么,我非常感谢你,我将更多地研究关于这些可能错误的类型