在将函数作为参数typescript传递时,避免使用两次参数定义
据我所研究,如果希望函数作为参数传递并用作回调函数,则需要在方法中引入回调函数将要使用的所有参数,然后在参数中定义回调函数的类型时,再次引入这些参数,因此需要两次 在下面的代码示例中,两个星号之间的参数必须定义两次,因为大多数参数都用于回调函数,在定义回调函数本身时,必须再次定义回调函数的类型(请参见最后一个参数callbackFunc):在将函数作为参数typescript传递时,避免使用两次参数定义,typescript,typescript-typings,Typescript,Typescript Typings,据我所研究,如果希望函数作为参数传递并用作回调函数,则需要在方法中引入回调函数将要使用的所有参数,然后在参数中定义回调函数的类型时,再次引入这些参数,因此需要两次 在下面的代码示例中,两个星号之间的参数必须定义两次,因为大多数参数都用于回调函数,在定义回调函数本身时,必须再次定义回调函数的类型(请参见最后一个参数callbackFunc): 我试图用变量中已经设置的参数传递函数,并延迟函数中的执行以避免参数类型定义,但我认为这是不可能的(我是Javascript新手),因此如果这不可能,有没有更
我试图用变量中已经设置的参数传递函数,并延迟函数中的执行以避免参数类型定义,但我认为这是不可能的(我是Javascript新手),因此如果这不可能,有没有更详细的方法在typescript中使用回调函数作为参数(我的意思是,一种避免为回调函数中使用的同一参数设置两次类型的方法)?感谢您可以将类型重构为其自己的类型声明,然后您还可以将可重用参数分组为单个参数作为对象: e、 g
非常感谢,这正是我所寻找的。但是,当我试图直接设置程序userInput.keyBoardListenerSet({gl,primitiveType,offset,count,shader.program,pos,rot,anglesChanged,document},draw)时,出现了一个新问题;我在shader.program中遇到错误:Object literal可能只指定已知属性,而“KeyboardListenerParam”类型中不存在“shader”。ts(2345)。我是否可以在作为参数传递的对象上直接插入另一个class属性作为参数?(shader与作为属性的程序分离,常量shader:shader=new shader(…)).Thankshmm,没有什么好方法可以避免显式复制/传递参数,除非您使用
例如,从lodash中拾取,否则我可能只会传递一个新对象,然后再次从params
访问键。您可以传递所有对象和访问特定参数,但也可以指定参数的名称例如keyBoardListenerSet({gl,primitiveType,offset,count,program:shader.program},pos,rot,anglesChanged,document,draw);
参见“program:shader.program”
keyBoardListenerSet: (**gl:WebGLRenderingContext**,
document:Document, **primitiveType: GLenum**,
**offset: number**, **count: number**, **program:WebGLProgram**,
pos: Float32Array, rot: Float32Array, anglesChanged: {x:boolean, y:boolean, z:boolean},
callbackFunc: (gl:WebGLRenderingContext, primitiveType: GLenum, offset: number,
count: number, program: WebGLProgram) => void): void => {
//really meaningful code
}
// could also be a Tuple if you don't want to type out param keys e.g. type A = [number, string]
type KeyboardListenerParam = {
gl: WebGLRenderingContext,
primitiveType: GLenum,
offset: number,
count: number,
program: WebGLProgram,
pos: Float32Array,
rot: Float32Array,
document: Document,
anglesChanged: { x: boolean, y: boolean, z: boolean }
};
const something = {
keyBoardListenerSet: (
params: KeyboardListenerParam,
callbackFunc: (params: KeyboardListenerParam) => void
): void => {
window.requestAnimationFrame(() => {
callbackFunc(params);
});
//really meaningful code
}
}