Actualmente tengo la definición de tipo como:
interface Param {
title: string;
callback: any;
}
Necesito algo como:
interface Param {
title: string;
callback: function;
}
pero el segundo no está siendo aceptado.
javascript
typescript
Smrutiranjan Sahu
fuente
fuente
Function
como se muestra en la primera línea de esta respuesta, y dice que() => void
se prefiere el segundo párrafo (usando el tipo de o lo que coincida con el caso de uso)?El mecanografiado de v1.4 tiene la
type
palabra clave que declara un alias de tipo (análogo a atypedef
en C / C ++). Puede declarar su tipo de devolución de llamada así:que declara una función que no toma argumentos y no devuelve nada. Una función que toma cero o más argumentos de cualquier tipo y no devuelve nada sería:
Entonces puedes decir, por ejemplo,
Si desea una función que tome un número arbitrario de argumentos y devuelva cualquier cosa (incluido void)
Puede especificar algunos argumentos obligatorios y luego un conjunto de argumentos adicionales (digamos una cadena, un número y luego un conjunto de argumentos adicionales) así:
Esto puede ser útil para cosas como los controladores EventEmitter.
Las funciones se pueden escribir tan fuertemente como desee de esta manera, aunque puede dejarse llevar y tener problemas combinatorios si trata de precisar todo con un alias de tipo.
fuente
Function
y(...args: any[]) => any
qué se prefiere?...args: any[]
No es muy útil.type CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
Lo que estaba buscando, Ty.Siguiendo la respuesta de Ryan, creo que la interfaz que está buscando se define de la siguiente manera:
fuente
Aquí hay un ejemplo de una función que acepta una devolución de llamada
Si no le importan los valores de retorno de las devoluciones de llamada (la mayoría de las personas no saben cómo utilizarlas de manera efectiva), puede usar
void
Tenga en cuenta que la firma que utilicé para el
callback
parámetro ...Yo diría que esto es una deficiencia de TypeScript porque se espera que proporcionemos un nombre para los parámetros de devolución de llamada. En este caso lo usé
_
porque no se puede usar dentro de lasqk
función.Sin embargo, si haces esto
Es TypeScript válido , pero se interpretará como ...
Es decir, TypeScript pensará que el nombre del parámetro es
number
y el tipo implícito esany
. Obviamente, esto no es lo que pretendíamos, pero, por desgracia, así es como funciona TypeScript.Así que no olvides proporcionar los nombres de los parámetros al escribir los parámetros de tu función ... por estúpido que parezca.
fuente
Puede definir un tipo de función en la interfaz de varias maneras,
Usar es muy sencillo,
fuente
Hay cuatro tipos de funciones abstractas, puede usarlas por separado cuando sepa que su función tomará un argumento o no, devolverá un dato o no.
Me gusta esto:
Para usar solo un tipo como cualquier tipo de función, podemos combinar todos los tipos abstractos juntos, así:
luego úsalo como:
En el ejemplo anterior, todo es correcto. Pero el ejemplo de uso a continuación no es correcto desde el punto de vista de la mayoría de los editores de código.
La llamada correcta para los editores es así:
fuente
Puede declarar la devolución de llamada como 1) propiedad de función o 2) método :
Hay una diferencia de tipeo importante desde TS 2.6 :
Obtiene tipos más fuertes ("sonido") en
--strict
o--strictFunctionTypes
modo, cuando se declara una propiedad de función . Tomemos un ejemplo:Técnicamente hablando, los métodos son bivariantes y las propiedades de la función son contravariantes en sus argumentos bajo
strictFunctionTypes
. Los métodos aún se verifican de manera más permisiva (incluso si no suena) para que sean un poco más prácticos en combinación con tipos incorporados comoArray
.Resumen
Código de muestra del patio de recreo
fuente