You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AVANZADO.md
+148
Original file line number
Diff line number
Diff line change
@@ -64,6 +64,12 @@ La mejor herramienta para crear bibliotecas React + TS en este momento es [`tsdx
64
64
-[Manejo de excepciones](#manejo-de-excepciones)
65
65
-[Bibliotecas de Terceros](#bibliotecas-de-terceros)
66
66
-[Sección 2: Patrones útiles por versión de TypeScript](sección-2-patrones-útiles-por-versión-de-typeScript)
67
+
-[TypeScript 2.9](#typescript-29)
68
+
-[TypeScript 3.0](#typescript-30)
69
+
-[TypeScript 3.1](#typescript-31)
70
+
-[TypeScript 3.2](#typescript-32)
71
+
-[TypeScript 3.3](#typescript-33)
72
+
-[TypeScript 3.4](#typescript-34)
67
73
68
74
</details>
69
75
@@ -833,3 +839,145 @@ let result = ask() // Opción<string>
833
839
A veces, DefinitelyTyped se puede equivocar o no puede abordar su caso de uso. Puedes declarar tu propio archivo con el mismo nombre de interfaz. Typecript fusionará interfaces con el mismo nombre.
834
840
835
841
# Sección 2: Patrones útiles por versión de TypeScript
842
+
843
+
Las versiones de TypeScript a menudo introducen nuevas formas de hacer cosas; Esta sección ayuda a los usuarios actuales de React + TypeScript a actualizar las versiones de TypeScript y explorar los patrones comúnmente utilizados por las aplicaciones y bibliotecas TypeScript + React. Esto puede tener duplicaciones con otras secciones; si detecta alguna error, [abre un issue](https://github.com/typescript-cheatsheets/react-typescript-cheatsheet-es/issues/new).
844
+
845
+
_Las guías de versiones de TypeScript anteriores a 2.9 no están escritas, ¡no dudes en enviar un PR!_ Además de la comunicación oficial del equipo de TS, también recomendamos [el blog de Marius Schulz para las notas de la versión](https://mariusschulz.com/).
846
+
847
+
## TypeScript 2.9
848
+
849
+
[[Notas de la versión](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html) | [Publicación del blog](https://blogs.msdn.microsoft.com/typescript/2018/05/31/announcing-typescript-2-9/)]
850
+
851
+
1. Escriba argumentos para _tagged template strings_ (por ejemplo, `styled-components`):
852
+
853
+
```tsx
854
+
exportinterfaceInputFormProps {
855
+
foo: string; // esto se entiende dentro de la cadena de plantilla a continuación
Más información: https://github.com/basarat/typescript-book/blob/master/docs/jsx/react.md#react-jsx-tip-generic-components
881
+
882
+
2. Soporte para `propTypes` y`staticdefaultProps` en JSX usando `LibraryManagedAttributes`:
883
+
884
+
```tsx
885
+
exportinterfaceProps {
886
+
name: string;
887
+
}
888
+
889
+
exportclassGreetextendsReact.Component<Props> {
890
+
render() {
891
+
const { name } =this.props;
892
+
return <div>Hola${name.toUpperCase()}!</div>;
893
+
}
894
+
static defaultProps = { name: "mundo" };
895
+
}
896
+
897
+
// ¡Verificaciones de tipo! ¡No se necesitan aserciones de tipo!
898
+
letel= <Greet />;
899
+
```
900
+
901
+
3. new `Unknown` type
902
+
903
+
Para escribir API para forzar verificaciones de tipo, no específicamente relacionadas con React, pero muy útiles para tratar con respuestas de API:
904
+
905
+
```tsx
906
+
interfaceIComment {
907
+
date: Date;
908
+
message: string;
909
+
}
910
+
911
+
interfaceIDataService1 {
912
+
getData():any;
913
+
}
914
+
915
+
letservice1: IDataService1;
916
+
constresponse=service1.getData();
917
+
response.a.b.c.d; // ERROR DE TIEMPO DE EJECUCIÓN
918
+
919
+
// ----- comparar con -------
920
+
921
+
interfaceIDataService2 {
922
+
getData():unknown; // ooo
923
+
}
924
+
925
+
letservice2: IDataService2;
926
+
constresponse2=service2.getData();
927
+
// response2.a.b.c.d; // COMPILE TIME ERROR if you do this
928
+
929
+
if (typeofresponse==="string") {
930
+
console.log(response.toUpperCase()); // `response` ahora tiene el tipo 'string'
931
+
}
932
+
```
933
+
934
+
También puede afirmar un tipo, o utilizar un **protector de tipo** contra un tipo `desconocido`. Esto es mejor que recurrir a `any`.
935
+
936
+
4. Referencias de proyectos
937
+
938
+
Las referencias de proyecto permiten que los proyectos TypeScript dependan de otros proyectos TypeScript, específicamente, permitiendo que los archivos tsconfig.json hagan referencia a otros archivos tsconfig.json. Esto permite que las bases de código grandes escalen sin recompilar cada parte de la base de código cada vez, dividiéndola en múltiples proyectos.
939
+
940
+
En cada carpeta, cree un tsconfig.json que incluya al menos:
941
+
942
+
```js
943
+
{
944
+
"compilerOptions": {
945
+
"composite": true, // le dice a TSC que es un subproyecto de un proyecto más grande
946
+
"declaration": true, // archivos de declaración emmet .d.ts ya que las referencias de proyecto no tienen acceso a los archivos ts de origen. Importante para que referencias de proyectos pueda trabajar!
947
+
"declarationMap": true, // mapas de origen para .d.ts
948
+
"rootDir": "."// especifique compilarlo en relación con el proyecto raíz en.
949
+
},
950
+
"include": [
951
+
"./**/*.ts
952
+
],
953
+
"references": [ // (opcional) matriz de subproyectos de los que depende su subproyecto
954
+
{
955
+
"path": "../myreferencedproject", // debe tener tsconfig.json
956
+
"prepend": true// concatenar js y mapas fuente generados por este subproyecto, si y solo si se usa outFile
957
+
}
958
+
]
959
+
}
960
+
```
961
+
962
+
y la raíz `tsconfig.json` que hace referencia al subproyecto de nivel superior:
963
+
964
+
```js
965
+
{
966
+
"files: [],
967
+
"references": [
968
+
{"path": "./proj1"},
969
+
{"path": "./proj2"},
970
+
]
971
+
}
972
+
```
973
+
974
+
y debe ejecutar `tsc--build` o `tsc-b`.
975
+
976
+
Para guardar la repetitiva tsconfig, puede usar la opción `extend`:
0 commit comments