我想要实现的一个例子:
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'.
等等(每个var的类似错误)。
周围有什么办法吗?目前我唯一能做的就是设置页面和文件夹ID来输入任何...
答案 0 :(得分:3)
您应该使用类型操作符,如
typeof folderId === "number"
检查数字或字符串。
答案 1 :(得分:3)
根据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;
}
}
答案 2 :(得分:3)
由于您已经提到了pageId
和folderId
打字稿的模糊类型,因此无法确定您的变量在分配时是数字还是字符串。因此,您需要在分配时指定变量的确切类型。这可以使用类型转换来完成
您可以将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
。
您也可以按照&#39; Paleo的回答