Skip to content

Commit 73261d7

Browse files
author
Lauro Silva
committed
finished section 2 of advanced cheat sheet
1 parent 2a8ad7a commit 73261d7

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

Diff for: AVANZADO.md

+148
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ La mejor herramienta para crear bibliotecas React + TS en este momento es [`tsdx
6464
- [Manejo de excepciones](#manejo-de-excepciones)
6565
- [Bibliotecas de Terceros](#bibliotecas-de-terceros)
6666
- [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)
6773

6874
</details>
6975

@@ -833,3 +839,145 @@ let result = ask() // Opción<string>
833839
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.
834840
835841
# 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+
export interface InputFormProps {
855+
foo: string; // esto se entiende dentro de la cadena de plantilla a continuación
856+
}
857+
858+
export const InputForm = styledInput<InputFormProps>`
859+
color:
860+
${({ themeName }) => (themeName === "dark" ? "black" : "white")};
861+
border-color: ${({ foo }) => (foo ? "red" : "black")};
862+
`;
863+
```
864+
865+
2. **JSX Generics**
866+
867+
https://github.com/Microsoft/TypeScript/pull/22415
868+
869+
Ayuda a escribir / usar componentes genéricos:
870+
871+
```tsx
872+
// en lugar de
873+
<Formik render={(props: FormikProps<Values>) => ....}/>
874+
875+
// uso
876+
<Formik<Values> render={props => ...}/>
877+
<MyComponent<number> data={12} />
878+
```
879+
880+
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`static defaultProps` en JSX usando `LibraryManagedAttributes`:
883+
884+
```tsx
885+
export interface Props {
886+
name: string;
887+
}
888+
889+
export class Greet extends React.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+
let el = <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+
interface IComment {
907+
date: Date;
908+
message: string;
909+
}
910+
911+
interface IDataService1 {
912+
getData(): any;
913+
}
914+
915+
let service1: IDataService1;
916+
const response = service1.getData();
917+
response.a.b.c.d; // ERROR DE TIEMPO DE EJECUCIÓN
918+
919+
// ----- comparar con -------
920+
921+
interface IDataService2 {
922+
getData(): unknown; // ooo
923+
}
924+
925+
let service2: IDataService2;
926+
const response2 = service2.getData();
927+
// response2.a.b.c.d; // COMPILE TIME ERROR if you do this
928+
929+
if (typeof response === "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`:
977+
978+
```js
979+
{
980+
"extends": "../tsconfig.base",
981+
// otras cosas
982+
}
983+
```

0 commit comments

Comments
 (0)