javascript - Equivalente en Typescript de PropTypes.oneOf, a partir de una variable existente
Sé que esto ya se ha preguntado y respondido en ¿Cuál es el equivalente de TypeScript de "PropTypes.oneOf" (restringir una variable a un subconjunto de valores), pero tengo un caso en el que no siento que la respuesta resuelva mi problema aún.
Estoy trabajando en convertir un proyecto de JavaScript a TypeScript. En un componente de React, se importa un archivo JSON. Una de las props del componente debe ser una de las claves de este JSON:
import React from "react"
import PropTypes from "prop-types"
import myData from "./myData.json"
const dataKeys = Object.keys(myData)
function MyComponent({myType, ...}) { ... }
MyComponent.propTypes = {
myType: PropTypes.oneOf(dataKeys).isRequired,
...
}
Ahora quiero convertir MyComponent a Typescript, así que voy a eliminar PropTypes y crear una interfaz Props basada en los propTypes existentes. El problema es que no estoy seguro de cómo convertir PropTypes.oneOf que se basa en una variable existente, especialmente una que depende de la importación de un archivo JSON. Normalmente, usaría una unión de literales de cadena o un tipo enum. ¿Cuáles son mis opciones en este caso?
Sí, tengo allowSyntheticDefaultImports habilitado en tsconfig.json.
Respuesta #1
Suponiendo que iconNames es un arreglo, esta respuesta de StackOverflow debería ayudar: Typescript derivar tipo unión a partir de los valores de una tupla/array
Básicamente, cuando defines iconNames, define el tipo junto con él:
const iconNames = ['plus', 'arrow', 'trash'] as const;
type IconNamesType = typeof iconNames[number];
