una sumar objeto fundamentos funciones funcion declarar clases cadena typescript

sumar - typescript fundamentos



TipoScript tipo de funciĆ³n Valor de retorno (3)

Mensaje original

TypeScript <2.8

Creé una pequeña biblioteca que permite una solución alternativa, hasta que se agrega una forma totalmente declarativa a TypeScript:

https://npmjs.com/package/returnof

También se creó un problema en Github, que pedía una Inferencia de tipos genéricos , que permitiría una forma totalmente declarativa de hacer esto:

https://github.com/Microsoft/TypeScript/issues/14400

Actualización febrero 2018

TypeScript 2.8

TypeScript 2.8 introdujo un nuevo tipo estático ReturnType que permite lograr eso:

https://github.com/Microsoft/TypeScript/pull/21496

Ahora puede obtener fácilmente el tipo de retorno de una función de forma totalmente declarativa:

const createPerson = () => ({ firstName: ''John'', lastName: ''Doe'' }) type Person = ReturnType<typeof createPerson>

Admito que tengo una función como esta

const createPerson = () => ({ firstName: ''John'', lastName: ''Doe'' })

¿Cómo puedo, sin declarar una interfaz o un tipo antes de declarar createPerson , obtener el tipo de valor de retorno?

Algo como esto:

type Person = typeof createPerson()

Escenario de ejemplo

Tengo un contenedor de Redux que asigna acciones de estado y de envío a elementos de un componente.

contenedores / Counter.tsx

import { CounterState } from ''reducers/counter'' // ... Here I also defined MappedState and mapStateToProps // The interface I would like to remove interface MappedDispatch { increment: () => any } // And get the return value type of this function const mapDispatchToProps = (dispatch: Dispatch<State>): MappedDispatch => ({ increment: () => dispatch(increment) }) // To export it here instead of MappedDispatch export type MappedProps = MappedState & MappedDispatch export default connect(mapStateToProps, mapDispatchToProps)(Counter)

componentes / Counter.tsx

import { MappedProps } from ''containers/Counter'' export default (props: MappedProps) => ( <div> <h1>Counter</h1> <p>{props.value}</p> <button onClick={props.increment}>+</button> </div> )

Quiero poder exportar el tipo de mapDispatchToProps sin tener que crear la interfaz MappedDispatch .

Reduje el código aquí, pero me hace escribir lo mismo dos veces.


Adaptado de https://github.com/Microsoft/TypeScript/issues/14400#issuecomment-291261491

const fakeReturn = <T>(fn: () => T) => ({} as T) const hello = () => ''World'' const helloReturn = fakeReturn(hello) // {} type Hello = typeof helloReturn // string

El ejemplo en el enlace usa null as T lugar de {} as T , pero eso rompe con el Type ''null'' cannot be converted to type ''T''.

La mejor parte es que la función dada como parámetro a fakeReturn no se llama realmente.

Probado con TypeScript 2.5.3

TypeScript 2.8 introdujo algunos tipos condicionales predefinidos, incluido el ReturnType<T> que obtiene el tipo de retorno de un tipo de función.

const hello = () => ''World'' type Hello = ReturnType<typeof hello> // string