打字稿类型'数字'不可分配│输入'字符串'

时间:2018-02-07 17:39:19

标签: angularjs node.js typescript types

我目前正在为Angular 4应用制作货币格式化指令。在解析上除去数字和小数以外的所有内容,最后得到一个字符串浮点数,但我需要它作为一个浮点数返回,所以我可以用它做数学。

Invalid input 'm': expected 'n/N' (line 1, column 2 (offset: 1))
"import-graphml"

3 个答案:

答案 0 :(得分:2)

这两行:

# install package from CRAN
# but specify the library director
# the download method
# and the configuration arguments
# to allow for source installs
install.packages( pkgs = "rgdal"
                    , lib = "./R_Packages"
                    , method = "curl"
                    , configure.args = c(
                                   "--with-gdal-config=/Library/Frameworks/GDAL.framework/Programs/gdal-config"
                                   , "--with-proj-include=/p/home/bin/proj4/include"
                                   , "--with-proj-lib=/p/home/bin/proj4/lib"
                                     ) 
      )

是问题所在。在未明确声明变量时,Typescript非常适合推断变量的类型。在这种情况下,因为您为let result = `${integer}${fraction}`; result = parseFloat(result); 分配了一个字符串,所以typescript会将其类型推断为字符串。要解决此问题,您有两种选择。首先,显式声明该变量的类型,以便它允许字符串和数字:

result

或者您可以将解析后的数字分配给新变量,而不是重用let result: string|number = `${integer}${fraction}`; result = parseFloat(result); // now should be ok. 变量:

result

答案 1 :(得分:0)

有一个明显的错误,您正在尝试为字符串变量分配一个数字,无需再次解析为Float,只需通过解析它来返回该数字

let result = `${integer}${fraction}`;
  // at this point result = "100.55";
return parseFloat(result);

答案 2 :(得分:0)

您无法在Typescript中为变量分配不同的类型。如果您使用string初始化变量,则必须保留string

    let result = `${integer}${fraction}`;
    let resultAsNumber = parseFloat(result); 
    return resultAsNumber

这是错误的常见原因,类型系统试图阻止您这样做。