【发布时间】:2016-09-13 10:24:40
【问题描述】:
我正在努力实现的一个例子:
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以输入任何...
【问题讨论】:
-
你需要像
private _pageId: string | number;这样定义字段并转换值 -
@iberbeu 但这会破坏逻辑,不是吗?我不希望 pageId 是
string | number,我希望它只是number -
那么你需要以某种方式将其转换为数字。如果您可以接收
string | number,您要么想要parseInt字符串值(您需要在运行时检查类型或.toString()),或者您实际上不想接收string | number。 -
用类型保护替换
isNaN。 typescriptlang.org/docs/handbook/advanced-types.html -
这是个坏主意。
parseInt将为空字符串值返回NaN,TypeScript 在编译时不知道parseInt是否会返回NaN。需要进行运行时检查。类型守卫对此无济于事(事实上,它会让事情变得更糟)
标签: javascript typescript