TS 데사피오 - 병합
9217 단어 challengespanishtypescript
Mezclar (merge) dos tipos en un nuevo tipo. Las claves del segundo tipo sobreescribirán a las claves del primero.
Más allá de un trabalenguas lo que primero que tenemos que entender es que lo que vamos a obtener es un objecto que Representativeará a un tipo por lo que en la primera aproximación simplemente lo que haremos será indicarlo. Así si
F
y S
dos objetos (tipos) podemos escribir algo como lo siguiente::type Merge<F, S> = {}
다음과 같은 형식의 그래피카 포데모스를 대표합니다.
Ahora tenemos que mantener los atributos del primero y del segundo de los genéricos que estamos recibiendo. Esto se consigue utilizando el operador keyof . Pero, ¿cómo obtenemos los atributos de
F
? Pues simplemente escribiendo algo como lo siguiente:[P in keyof F]
TypeScript와 같은 유형의 문서를 작성하십시오.
Pero, ¿cómo añadimos los atributos de
F
? Pues aquí es donde tenemos que utilizar el tipo de unión para obtener todos los atributos que hay en ambos objetos. Es más, tenemos que asignarle un valor a cada uno de estos atributos, pero como en este momento no podemos saber cuál es lo que hacemos será asignarle never porque de esta manera podemostype Merge<F, S> = {
[P in keyof F | keyof S]: never
}
Por lo tanto, en este punto lo que tenemos es algo como que se muestra en la siguiente figura:
Ahora simplemente tenemos que determinar el valor que se asignará al atributo en cuestión. Según el enunciado del reto si el atributo pertenece al segundo genérico entonces ese será su valor mientras que si pertenece al Primero será el del Primero y en el caso de que no sea ningunono de 104
TypeScript와 관련된 문제가 무엇입니까? Pues gracias al uso de la clausula extends ( https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#in-extends-clause ) de tal forma que, partiendo del tipo de datos que está formado por todos los atributos del segundo
P
(que ya sabemos) al mismo, tendremos que escribir algo como lo siguiente:[P in keyof F | keyof S]: P extends keyof S
Es decir, hemos construido el tipo de datos que es la unión de los atributos de
S
y nunca
y lo hemos llamado S
. Ahora lo que hacemos simplemente es ver si el atributo keyof S
pertenece al conjunto de atributos F
.Tipo Condicional TypeScript의 형식 스크립트에 대한 설명이
S
에 의해 작성되었습니다.¿Pero qué tenemos que hacer para mantener el tipo del atributo? Pues bien, basta con acceder a el en la tipado de
P
. ¿코모? Muy sencillo, utilizando el operador P
. Es decir, si quieres acceder a un atributo de S
escribirías algo como S
. Como el atributo que pasa la condición es S
simplemente accedemos a el de tipo []
. En caso de que no lo sea le asignaremos S
:type Merge<F, S> = {
[P in keyof F | keyof S]: P extends keyof S ? S[P] : never
}
(Si el atributo está declarado en
S['atributo']
para asignar su valor o en caso contrario lo que hacemos es asignarlo P
at ya que por의 impetimos este proceso de repetimos este proceso pero esta vez viendo si el atributo está declarado en S
para asignar su valor o en caso contrario lo que hacemos es asignarlo never
Pero para que TypeScript no de errores tenemos que completar el operador condicional).Esto nos deja el siguiente resultado para el desafío:
type Merge<F, S> = {
[P in keyof F | keyof S]: P extends keyof S
? S[P]
: P extends keyof F
? F[P]
: never
}
Ahora si vamos a ejecutar el resultado de nuestro challege para ver si tenemos errores o no veremos que todas las pruebas Mostradas pasan correctamente por lo que la solución propuesta es correcta.
Reference
이 문제에 관하여(TS 데사피오 - 병합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/devjosemanuel/ts-desafio-merge-3nf5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)