Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型脚本代码传输到JS库,不';t在健全性检查时抛出错误_Javascript_Typescript - Fatal编程技术网

Javascript 类型脚本代码传输到JS库,不';t在健全性检查时抛出错误

Javascript 类型脚本代码传输到JS库,不';t在健全性检查时抛出错误,javascript,typescript,Javascript,Typescript,用例-我有一个基于typescript的项目,它通过网页包传输到一个独立的库中 要启动库,我们必须传递参数,这是一个对象,我们称它为initOptions 此initOptions对应于**initOptions**接口 如果未根据接口传递所需的参数,则typeScript将抛出错误 将相同的代码传输到JS,不会引发任何错误 这是标准行为吗?对于我的用例,我是否也需要对参数进行显式检查 假设库中有一个init方法,该方法根据下面的接口要求使用initOptions- // this is s

用例-我有一个基于typescript的项目,它通过网页包传输到一个独立的库中

  • 要启动库,我们必须传递参数,这是一个对象,我们称它为initOptions
  • initOptions对应于**initOptions**接口
  • 如果未根据接口传递所需的参数,则typeScript将抛出错误
  • 将相同的代码传输到JS,不会引发任何错误
这是标准行为吗?对于我的用例,我是否也需要对参数进行显式检查

假设库中有一个init方法,该方法根据下面的接口要求使用initOptions-

// this is somewhat how library looks like
interface InitOptions = {
  arg1: String,
  arg2: String,
  arg3: String
}
function init(options: InitOptions): someOtherInterface {
 return "something"
}

<!------------------------------------------------------------------------------------->

// Running in the dev env in typeScript

let initOptions: InitOptions = {
  arg1: "sample",
  arg2: "sample"
}
lib.init(initOptions) // throws an error as the arguments does not matched the interface.

<!------------------------------------------------------------------------------------->

// when running after transpiling the code as a library, it throws no error in this scenario
let initOptions: InitOptions = {
  arg1: "sample",
  arg2: "sample"
}
lib.init(initOptions) //throws no error at all
//这就是库的外观
接口初始化选项={
arg1:字符串,
arg2:字符串,
arg3:字符串
}
函数init(选项:InitOptions):someOtherInterface{
返回“某物”
}
//在类型脚本中的开发环境中运行
让initOptions:initOptions={
arg1:“样本”,
arg2:“样本”
}
lib.init(initOptions)//由于参数与接口不匹配而引发错误。
//在将代码转换为库后运行时,在这种情况下不会抛出错误
让initOptions:initOptions={
arg1:“样本”,
arg2:“样本”
}
lib.init(initOptions)//完全不抛出错误
所以,我的问题是,如果我们想对参数进行严格的检查,是否需要进行显式检查?typeScript在编译时不将此功能发送给JS吗

typeScript在编译时不将此功能发送给JS吗

绝对不是

此TypeScript:

// this is somewhat how library looks like
interface InitOptions {
  arg1: String,
  arg2: String,
  arg3: String
}
function init(options: InitOptions): string {
    return "something"
}
这是JS:

"use strict";
function init(options) {
    return "something";
}
编译之后,与类型相关的所有内容都消失了



类型的意义在于帮助发展。编译后的生产代码的唯一好处是,由于不正确地使用应用程序数据,您希望有更少的bug。

;类型检查只在编译时进行——JS在编译后就没有类型的概念