Hay una función simple que selecciona algo por nombre o índice
async function(value:number|string, by: 'index'|'name' = 'index'){ switch(by){ case 'index':{ selectby(value) }; case 'name':{ selectby(value) } } }¿Hay alguna manera de saber el número de tipo de valor si es 'índice' o no se pasa, de lo contrario cadena
He intentado con la función de sobrecarga:
async function(value:number, by?: 'index' = 'index') async function(value:string, by: 'name' = 'index') async function(value:number|string, by: 'index'|'name' = 'index')el problema es que, la implementación donde la función asíncrona (valor: número | cadena, por: 'índice' | 'nombre' = 'índice') no aparece al pasar el mouse sobre la función. Muestra la primera anulación como la función predeterminada
¿Cómo puedo dar una documentación mecanografiada que si 'si el índice entonces el número' otra cadena
Su ejemplo asíncrono funciona bien:
async function test(value:number, by: 'index'): Promise<void>; async function test(value:string, by: 'name'): Promise<void>; async function test(value:number|string, by: 'index'|'name' = 'index'): Promise<void> { } test('test', 'name') // works test(1, 'name') // does not work test(1, 'index') // works test('aa', 'name') // does not work Su IDE sugerirá el primer tipo de sobrecarga de función de forma predeterminada, pero tan pronto como agregue una cadena como primer parámetro, debería sugerir al usuario que agregue el name como segundo parámetro. 
Puedes encontrar el ejemplo del parque infantil en el siguiente enlace .
¿Qué pasa con el uso de typeof ? Entonces no necesita el parámetro by en absoluto:
switch(typeof value) { case "number": { selectBy(value) } case "string": { selectBy(value) } } Alternativamente, puede componer sus parámetros como un tipo de objeto personalizado, incorporando sus restricciones establecidas. De esta manera, se verá obligado a pasar el derecho by el tipo de value . Sin embargo, esto conducirá a que solo se pase un parámetro a su función:
type Value1 = { value: number, by: 'index' } | { value: string, by: 'name' } const getValue1 = async function ({ value, by }: Value1) { switch (by) { case 'index': { selectby(value) }; case 'name': { selectby(value) } } } getValue1({ value: 1, by: 'index' })Lo mismo es posible para un tipo de matriz:
type Value2 = [number, 'index'] | [string, 'name'] const getValue2 = async function ([value, by]: Value2) { switch (by) { case 'index': { selectby(value) }; case 'name': { selectby(value) } } } getValue2([ 1, 'index' ])Patio de juegos mecanografiado
editar: las sugerencias de desplazamiento y escritura dependen de su IDE utilizado. Normalmente, puede cambiar la firma mostrada usando algunos botones de flecha a los lados:
No conozco ningún mecanismo para decirle al IDE en qué orden mostrar las sobrecargas.