interface featureType<Props=any, State=any> { initialState: State; props: Props; processState: (props: Props, state: State) => any; } const feature1Comp: featureType = { initialState: { lastName: '' }, props: { firstName: 'eliav' }, processState: (props, state) => { props; // type should be {firstName: string} but instead is any }, }; ¿Por qué no se infiere el tipo de props ? ¿Qué me estoy perdiendo?
patio de juegos rápido aquí (la URL se está cortando, así que copie y pegue el código)
(Publico esta pregunta solo porque lleva demasiado tiempo encontrar una solución para ese problema y este es un uso bastante común para mecanografiado)
const feature1Comp = FeatureType<{ firstName: string}, any>
Trate a los genéricos como una especie de 'funciones de tipo'. Si no proporciona los tipos concretos, se usarán los valores predeterminados, por lo que TS asume que Props y State se escriben como cualquiera.
Actualización: esto es lo que funcionará con la inferencia
interface Component<P,S> { initialState: S, props: P, processState: (props: P, state: S) => any } function createComponent<P, S>(arg: Component<P, S>): Component<P, S> { return arg; } const x = createComponent({ initialState: 'someValue', props: { firstName: 'Elias' }, processState: (p, s) => { console.log(p.firstName) // Works console.log(p.lastName) // Error } })