在Typescript中,String或Number值

12 浏览
0 Comments

在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设置为任意类型...

0
0 Comments

在Typescript中,有时候需要处理既可以是字符串又可以是数字的值。下面的代码展示了如何处理这种情况。

首先,代码中定义了一个叫做isNumeric的函数,用于判断一个值是否为数字或者可以转化为数字的字符串。接下来,还定义了一个叫做intVal的函数,用于将一个值转化为数字。

在Test类的构造函数中,接受两个参数pageId和folderId,它们都可以是字符串或者数字。通过调用isNumeric函数判断这两个参数的类型,如果是数字或者可以转化为数字的字符串,则将其转化为数字并保存到对应的私有变量中。如果不是数字或者无法转化为数字的字符串,则将其保存到对应的私有变量中。

这样,通过使用isNumeric函数和intVal函数,可以在Typescript中处理既可以是字符串又可以是数字的值,实现了问题的解决。

以上就是关于在Typescript中处理字符串或数字值的问题的原因和解决方法的介绍。

0
0 Comments

在这段内容中,我们可以看到在TypeScript中出现了一个关于String或Number值的问题。问题的原因是由于pageIdfolderId的类型不明确,TypeScript在赋值时无法确定变量是一个数字还是一个字符串。因此,在赋值时需要指定变量的确切类型。可以通过类型转换来实现。

可以按照以下方式将folderIdpageId进行类型转换:

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没有类型的概念。所以我猜这就是预期的行为了。

0
0 Comments

在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操作符来判断类型。

0