Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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
Javascript 从JS切换到TS时,类型错误上不存在属性_Javascript_Typescript - Fatal编程技术网

Javascript 从JS切换到TS时,类型错误上不存在属性

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

您好,为了更好地编码,我最近决定从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: 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
噢,好吧!现在一切正常!不管我之前的评论是什么,我非常感谢你,我将更多地研究关于这些可能错误的类型