我正在努力实现的一个例子:
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来键入任何...
4条答案
按热度按时间vqlkdk9b1#
Guenter Guckelsberger的答案下面的注解建议您需要使用像
'123'
这样的字符串作为数字。gc0ot86w2#
您应该使用typeof运算符,
以检查数字或字符串。
iqxoj9l93#
因为你提到了
pageId
和folderId
的一个不明确的类型,所以在赋值的时候,typescript不能分辨你的变量是一个数字还是一个字符串,因此你需要在赋值的时候指定你的变量的确切类型,这可以通过类型转换来完成您可以将
folderId
和pageId
类型转换为数字或字符串,如下所示:类型转换的另一种方法是
<number>folderId``<string>folderId
,也可以使用type Guards,如“Paleo的答案”中所示uujelgoq4#
对于像我这样的人来说,他们来这里寻找一种方法来约束一个类型为字符串,而字符串可以计算为数字,你可以使用模板文本类型。
在Typescript github问题中对此有一些讨论: