Atualmente, tenho definição de tipo como:
interface Param {
title: string;
callback: any;
}
Eu preciso de algo como:
interface Param {
title: string;
callback: function;
}
mas o segundo não está sendo aceito.
javascript
typescript
Smrutiranjan Sahu
fonte
fonte
Function
como mostrado na primeira linha desta resposta, e dizendo que o segundo parágrafo (usando o tipo de() => void
ou o que corresponde ao caso de uso) é o preferido?Texto
type
datilografado da v1.4 possui a palavra - chave que declara um alias de tipo (análogo a umtypedef
em C / C ++). Você pode declarar seu tipo de retorno de chamada assim:que declara uma função que não aceita argumentos e não retorna nada. Uma função que recebe zero ou mais argumentos de qualquer tipo e não retorna nada seria:
Então você pode dizer, por exemplo,
Se você deseja uma função que recebe um número arbitrário de argumentos e retorna qualquer coisa (incluindo nulo):
Você pode especificar alguns argumentos obrigatórios e, em seguida, um conjunto de argumentos adicionais (por exemplo, uma string, um número e, em seguida, um conjunto de argumentos adicionais) assim:
Isso pode ser útil para coisas como manipuladores de EventEmitter.
As funções podem ser digitadas com a mesma força que você desejar dessa maneira, embora você possa se deixar levar e ter problemas combinatórios se tentar definir tudo com um alias de tipo.
fonte
Function
e o(...args: any[]) => any
que é preferido?...args: any[]
não é muito útil.type CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
o que eu estava procurando, ty.Seguindo a resposta de Ryan, acho que a interface que você está procurando é definida da seguinte maneira:
fonte
Aqui está um exemplo de uma função que aceita um retorno de chamada
Se você não se importa com os valores de retorno dos retornos de chamada (a maioria das pessoas não sabe como utilizá-los de maneira eficaz), você pode usar
void
Observe que a assinatura que usei para o
callback
parâmetro ...Eu diria que isso é uma deficiência do TypeScript, porque é esperado que forneçamos um nome para os parâmetros de retorno de chamada. Nesse caso, usei
_
porque não é utilizável dentro dosqk
função.No entanto, se você fizer isso
É válido TypeScript, mas será interpretado como ...
Ou seja, o TypeScript pensará que o nome do parâmetro é
number
e o tipo implícito éany
. Obviamente, não é isso que pretendemos, mas, infelizmente, é assim que o TypeScript funciona.Portanto, não se esqueça de fornecer os nomes dos parâmetros ao digitar os parâmetros de sua função ... por mais estúpido que possa parecer.
fonte
Você pode definir um tipo de função na interface de várias maneiras,
Usando é muito simples,
fonte
Existem quatro tipos de funções abstratas, você pode usá-los separadamente quando souber que sua função terá argumentos ou não, retornará dados ou não.
como isso:
Para usar apenas um tipo como qualquer tipo de função, podemos combinar todos os tipos abstratos, assim:
então use-o como:
No exemplo acima, tudo está correto. Mas o exemplo de uso abaixo não está correto do ponto de vista da maioria dos editores de código.
A chamada correta para editores é assim:
fonte
Você pode declarar o retorno de chamada como 1) propriedade da função ou 2) método :
Há uma diferença de digitação importante desde o TS 2.6 :
Você obtém tipos mais fortes ("som") no modo
--strict
ou--strictFunctionTypes
, quando uma propriedade de função é declarada. Vamos dar um exemplo:Tecnicamente falado, os métodos são bivariada e propriedades funcionais contravariante em seus argumentos sob
strictFunctionTypes
. Os métodos ainda são verificados de forma mais permissiva (mesmo que não sejam sonoros) para serem um pouco mais práticos em combinação com tipos internos, comoArray
.Resumo
Código de exemplo do parque infantil
fonte