Typescript 中的字符串或数字值

新手上路,请多包涵

我正在努力实现的一个例子:

 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:Type 'string | number' is not assignable to type 'number'. Type 'string' is not assignable to type 'number'.

等等(每个变量都有类似的错误)。

有什么办法吗?目前我唯一能做的就是设置页面和文件夹 ID 以键入任何…

原文由 Tomas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 284
2 个回答

Guenter Guckelsberger 的回答下的评论表明您需要使用像 '123' 这样的字符串作为数字。这是一个解决方案:

 /**
* See http://stackoverflow.com/questions/9716468/is-there-any-function-like-isnumeric-in-javascript-to-validate-numbers
*/
function isNumeric(n: any) : n is number | string {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

function intVal(n: number | string): number {
    return typeof n === "number" ? n : parseInt(n, 10);
}

class Test {
    private _folderId: number;
    private _pageId: number;
    private _folderName: string;
    private _pageName: string;

    constructor(pageId: string | number, folderId: string | number) {
        if (isNumeric(folderId))
            this._folderId = intVal(folderId);
        else
            this._folderName = <string>folderId;
        if (isNumeric(pageId))
            this._pageId = intVal(pageId);
        else
            this._pageName = <string>pageId;
    }
}

原文由 Paleo 发布,翻译遵循 CC BY-SA 3.0 许可协议

您应该使用 typeof 运算符,例如

typeof folderId === "number"

检查数字或字符串。

原文由 Guenter Guckelsberger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题