¿Por qué no falta el error?
interface User { // way 1 foo(): string; foo2(x:number): string; // way 2 normal: () => string; normal2: (x:number) => string; } let user: User = { // way 1 foo: () => '', foo2: () => '', // why no error since x is missing // way 2 normal: () => '', normal2: () => '', // why no error since x is missing };Ver este patio de juegos mecanografiado
Una función de menor aridad es asignable a una de mayor aridad siempre que su tipo de retorno sea compatible y los parámetros que están presentes sean compatibles.
En su caso, debido a que las funciones no tienen parámetros y devuelven una string , son compatibles.
type NumFn = (n: number) => string; declare const isCompatible: (() => string) extends NumFn ? true : false; // trueSi invoca (x:number)=>string sin pasar x , obtiene No se proporcionó An argument for 'x' was not provided. error.
PERO ESTO NO ES LO QUE ESTAS HACIENDO
Lo que está haciendo es asignar ()=>string a (x:number)=>string , lo cual es válido. Cuando asigna ()=>string a (x:number)=>string , el compilador pregunta: ¿puede ()=>string comportarse igual que (x:number)=>string ?
es decir, ¿puede ()=>string tomar un number y escupir una string , al igual que lo que hace (x:number)=>string ?
La respuesta es sí, ()=>string técnicamente puede tomar cualquier número, pero simplemente ignorándolo, luego devuelve una cadena, independientemente del número que tome. Por lo tanto, ()=>string es asignable a (x:number)=>string
Al igual que las respuestas anteriores, parece que solo se puede detectar cuando llama a la función sin argumentos, mi apuesta es que tiene algo que ver con la escritura contextual mecanografiada (yo también estoy aprendiendo aquí)
Los parámetros de función se verifican uno a la vez, y el tipo en cada posición de parámetro correspondiente se compara entre sí. Si no desea especificar ningún tipo, la tipificación contextual de TypeScript puede inferir los tipos de argumento, ya que el valor de la función se asigna directamente a una variable de tipo SearchFunc. Aquí, también, el tipo de retorno de nuestra expresión de función está implícito en los valores que devuelve .
interface Counter { (start: number): string; interval: number; foo: (x:number) => string; bar(x:number):string; reset(): void; } function getCounter(): Counter { let counter = function (s...