javascript - ¿comprobar si la interfaz tiene propiedad?
Necesito verificar si una interfaz tiene una propiedad específica. Intenté/busqué en Google, pero no pude encontrar una solución adecuada. Por ejemplo;
interface Props {
id: string;
name: string;
age: number;
}
¿Cuál es la mejor manera de comprobar si Props tiene la propiedad "age"?
Respuesta #1
Si lo que buscas es comprobar si una clave existe en un tipo en tiempo de compilación, puedes usar algo como esto:
type ContainsKey<T, K extends string | number> = T extends { [key in K]: any }
? true
: false
type contains1 = ContainsKey<Props, 'age'> // type contains1 = true
type contains2 = ContainsKey<Props, 'foo'> // type contains2 = false
Respuesta #2
En un comentario has dicho:
Necesito para una verificación condicional. Como si (la interfaz contiene una propiedad) hacer cierta cosa
No puedes hacer eso. Las interfaces no existen en tiempo de ejecución cuando se ejecutan las declaraciones if. Toda la información de tipos de TypeScript se elimina al compilar de TypeScript a JavaScript (hay algunos objetos creados por enum, pero la información de tipo relacionada con ellos desaparece).
Puedes comprobar si un objeto tiene una propiedad particular en tiempo de ejecución:
// Check if it has a property (either as an own property or an inherited one)
if ("propertyName" in someObject) {
// ...yes, it does...
}
o
// Check if it has a property (as an own property, ignoring inherited ones)
if (someObject.hasOwnProperty("propertyName")) {
// ...yes, it does...
}
Algunas personas consideran que no deberías usar hasOwnProperty como un método así porque puede ser sobrescrito y que deberías usar el que está en Object.prototype en su lugar:
// Check if it has a property (as an own property, ignoring inherited ones)
if (Object.prototype.hasOwnProperty.call(someObject, "propertyName")) {
// ...yes, it does...
}
