在 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'})}
没什么不同. 也许我对打字的工作原理有一些误解. 谢谢.