gpt4 book ai didi

javascript - 带验证的自定义类型字符串 "EmailAddress"

转载 作者:行者123 更新时间:2023-11-28 11:04:45 25 4
gpt4 key购买 nike

下面我有一些 typescript 代码。我的目的是为电子邮件地址创建一个新的自定义类型,即具有特定验证的字符串。我想要一种确保字符串参数已经被验证为特定类型的方法。下面的代码不会像我预期的那样抛出任何验证错误。

class EmailAddress {
constructor (emailAddress) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
if (!re.test(emailAddress)) throw new Error('invalid email address')
}
}

function exampleTakesEmail (email: EmailAddress) {
return {
email
}
}

let email = new EmailAddress('example@gmail.com')
let notEmail = ''

console.log(exampleTakesEmail(email))
console.log(exampleTakesEmail(notEmail))

当然,如果我运行这个:

let email = new EmailAddress('')

然后我确实收到错误。

最佳答案

如果我理解正确,那么当参数不是电子邮件地址类型且不是来自 EmailAddress 构造函数时,您希望从 exampleTakesEmail 抛出某种错误。

我认为将 TypeScript 编译为 JavaScript 后,类型信息不会像您期望的那样保留。因此,如果您需要类型检查,您可能会考虑使用 instanceof 运算符,它看起来像这样:

class EmailAddress {
constructor (emailAddress) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
if (!re.test(emailAddress)) throw new Error('invalid email address');

}
}

function exampleTakesEmail (email: EmailAddress) {
if(!(email instanceof EmailAddress)) throw new Error("Not email")
return {
email
}
}

let email = new EmailAddress('example@gmail.com')
let notEmail = ''//new EmailAddress('abc')

console.log(exampleTakesEmail(email))
console.log(exampleTakesEmail(notEmail))

jsfiddle链接:https://jsfiddle.net/sayan751/rpbt0xjo/

<小时/>

其他资源:来自 TypeScript FAQ :

TypeScript types are erased (https://en.wikipedia.org/wiki/Type_erasure) during compilation. This means there is no built-in mechanism for performing runtime type checks. It's up to you to decide how you want to distinguish objects.

关于javascript - 带验证的自定义类型字符串 "EmailAddress",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43555464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com