在Typescript中,String或Number值
在Typescript中,String或Number值
我想要实现的一个例子:
class Test { private _folderId: number; private _pageId: number; private _folderName: string; private _pageName: string; constructor(pageId: string | number, folderId: string | number){ this._folderId = (!isNaN(+folderId)) ? folderId : undefined; this._pageId = (!isNaN(+pageId)) ? pageId : undefined; this._folderName = (isNaN(+folderId)) ? folderId : undefined; this._pageName = (isNaN(+pageId)) ? pageId : undefined; } }
不幸的是,这会引发编译器错误:
TS2322: 类型“string | number”不能赋值给类型“number”。类型“string”不能赋值给类型“number”。
对于每个变量都会出现类似的错误。有没有什么办法解决这个问题?目前我唯一能做的就是将页面和文件夹ID设置为任意类型...
在Typescript中,有时候需要处理既可以是字符串又可以是数字的值。下面的代码展示了如何处理这种情况。
首先,代码中定义了一个叫做isNumeric的函数,用于判断一个值是否为数字或者可以转化为数字的字符串。接下来,还定义了一个叫做intVal的函数,用于将一个值转化为数字。
在Test类的构造函数中,接受两个参数pageId和folderId,它们都可以是字符串或者数字。通过调用isNumeric函数判断这两个参数的类型,如果是数字或者可以转化为数字的字符串,则将其转化为数字并保存到对应的私有变量中。如果不是数字或者无法转化为数字的字符串,则将其保存到对应的私有变量中。
这样,通过使用isNumeric函数和intVal函数,可以在Typescript中处理既可以是字符串又可以是数字的值,实现了问题的解决。
以上就是关于在Typescript中处理字符串或数字值的问题的原因和解决方法的介绍。
在这段内容中,我们可以看到在TypeScript中出现了一个关于String或Number值的问题。问题的原因是由于pageId
和folderId
的类型不明确,TypeScript在赋值时无法确定变量是一个数字还是一个字符串。因此,在赋值时需要指定变量的确切类型。可以通过类型转换来实现。
可以按照以下方式将folderId
和pageId
进行类型转换:
constructor(pageId: string | number, folderId: string | number){ this._folderId = (!isNaN(+folderId)) ? folderId as number : undefined; this._pageId = (!isNaN(+pageId)) ? pageId as number : undefined; this._folderName = (isNaN(+folderId)) ? folderId as string : undefined; this._pageName = (isNaN(+pageId)) ? pageId as string: undefined; }
另一种类型转换的方法是<number>folderId
和<string>folderId
。
你也可以采用类型保护,如Paleo的回答中所示。
这正是我想要的,很抱歉我接受了Paleo的回答,只是因为我认为<type>var
对其他开发人员来说更明显。谢谢!
和你一样,我开始进行类型转换(使用类型保护),但这是不正确的。使用你的解决方案,像'123'
这样的字符串值将被存储在类型为number
的变量中。
是的,<type>var
确实更有意义。但是,如果你在一个.jsx
文件中编码,编辑器会抱怨你使用<type>var
,这就是var as type
的便利之处。
实际上,如果你尝试将一个字符串赋给一个类型为数字的变量,TypeScript编译器会报错,错误信息大致如下:类型number和类型string不可互相赋值
。
通过('123', '456')
调用你的构造函数。!isNaN(+'123')
返回true
。然后,将字符串值'123'
分配给类型为number
的变量this._folderId
。
噢,对了...最终生成的代码是JavaScript,JavaScript没有类型的概念。所以我猜这就是预期的行为了。
在Typescript中,有时候我们需要判断一个变量的类型是字符串还是数字。然而,使用typeof操作符时会遇到一些问题。
例如,我们可以使用以下代码来检查变量folderId的类型是否为数字:
typeof folderId === "number"
这样,如果folderId的类型为数字,条件将返回true,否则返回false。
然而,有人可能会提出疑问,为什么不能直接使用以下代码来判断字符串是否为数字:
typeof "123" === "number"
这个条件返回的结果是false。而当我们使用以下代码时:
typeof 123 === "number"
结果却是true。
事实上,"123"和123都应该被判断为数字类型。这是因为在JavaScript中,字符串可以表示数字。
那么为什么typeof操作符在这种情况下会返回不同的结果呢?
这是因为在JavaScript中,typeof的行为是基于值的,而不是基于变量的类型的。
当我们将字符串"123"传递给typeof操作符时,它会返回"string",因为它是一个字符串值。而当我们将数字123传递给typeof操作符时,它会返回"number",因为它是一个数字值。
因此,为了正确地判断字符串是否为数字,我们应该使用以下代码:
typeof parseInt("123") === "number"
parseInt函数将字符串转换为数字,并且typeof操作符会返回"number",这样我们就可以正确地判断字符串是否为数字了。
我们应该使用typeof操作符来判断变量的类型是否为数字或字符串。当判断字符串是否为数字时,我们应该使用parseInt函数将字符串转换为数字,然后使用typeof操作符来判断类型。