在 gatsby 的一个项目中工作,我也在使用打字脚本.我以前从未使用过TypeScrip,所以我期待着某种类型的PHP类型声明行为,但不确定它是否是这样工作的.当我意识到我导入的一些接口是未定义的,并且从未因此而出现任何错误时,我已经做了相当多的工作,并且快乐地继续工作(想想我的打字有多好).所以我试图通过使用错误的类型来 destruct 代码,但是TypeScrip似乎忽略了所有的声明. 下面是一个例子: 我得到了这个接口(Draggable.ts):

export interface Draggable {
   x: number,
   y: number
}

由此人导出(index.ts)

import Draggable from './draggable';
import Resizable from './resizable';
import Stageable from './stageable';
import Page from './page';
import ToolState from './states/tool-state';
import CommonAction from './states/action';
import ToolItem from './tool';

export default {
   Draggable,
   Resizable,
   Stageable,
   ToolState,
   Page,
   CommonAction,
   ToolItem
}

然后在组件中按如下方式导入

import Interfaces from '../interfaces';

并在以下方法的类型提示中使用:

 reposition: (event: MouseEvent, diffPos: Interfaces.Draggable) => {
     const position = {
         x: event.screenX - diffPos.x,
         y: event.screenY - diffPos.y
     }

    dispatch({ type: 'UPDATE_BAR_POSITION', payload: { position }})
}

现在,如果我try 使用错误的参数类型调用该方法,代码将毫无问题地运行:

<div 
  className="bg-gray-600 toolbar" 
  style={{top: barPosition.y + 'px', left: barPosition.x + 'px', width: barWidth}}
  onDragStart={dragStart}
  onDrag={e => reposition(e, 'blaa')}
  onDragEnd={e => reposition(e, diffPos)}
  draggable={true}
>

即使我try 像这样的事情

onDrag={e => reposition(e, {x: 'blaa', y: 'blablaaa'})}

没什么不同. 也许我对打字的工作原理有一些误解. 谢谢.

推荐答案

在您的Java脚本运行时,TypeScrip不会抛出任何错误.但是,如果TypeScrip服务器工作正常,它应该会显示您的工作环境(IDE)中的错误.

我认为在开始编写代码之前,您至少应该阅读由TypeScrip提供的this document,它解释了它的主要规则,包括以下几个规则.

粗略地说,一旦TypeScrip的编译器判断完您的代码,它就会擦除这些类型以生成最终的"编译"代码.这意味着一旦您的代码被编译,生成的普通JS代码就没有类型信息. 这也意味着,TypeScrip永远不会根据它推断的类型更改程序的行为.底线是,虽然您可能会在编译期间看到类型错误,但类型系统本身与程序运行时的工作方式无关.

看看示例here,即使在输入脚本操场上,您也可以看到,即使它显示了输入脚本代码中的错误,它仍然可以运行,并且在运行时不会出现错误.

类型脚本代码应该被编译/转换成用于运行的Java脚本代码,并且根据编译/转换环境,它可能会忽略一些类型脚本错误.这就解释了为什么您的代码仍在运行而没有出现错误.

一点儿没错.同样在一开始,当我编写一些简单的打字脚本学习代码示例时,我也在浏览器的控制台上收到了输入错误,现在这种情况没有发生.该函数只是以错误的类型运行

另外,看起来你提到的"类型错误"是TypeError,这是JavaScript对象,这不是由Typescript抛出的.

我认为您必须判断您的编码环境(IDE可能?),它应该显示通过运行TypeScrip服务器发现的TypeScrip错误.

Javascript相关问答推荐

使用redux-toolet DelivercThunks刷新访问令牌

Vega中的模运算符

Cookie中未保存会话数据

基于变量切换隐藏文本

setcallback是什么时候放到macrotask队列上的?

如何将zoom 变换应用到我的d3力有向图?

Rxjs流中生成IMMER不能在对象上操作

将数组扩展到对象中

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

expo 联系人:如果联系人的状态被拒绝,则请求访问联系人的权限

未捕获的运行时错误:调度程序为空

JS Animate()方法未按预期工作

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

使用线性插值法旋转直线以查看鼠标会导致 skip

在HTML5画布上下文中使用putImageData时,重载解析失败

Played link-Initialize.js永远显示加载符号

Refine.dev从不同的表取多条记录

无法在Adyen自定义卡安全字段创建中使用自定义占位符

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组