Incluso si el type MyRequest requiere el atributo ID , el process de la función puede declarar la variable de tipo MyRequest incluso si falta el atributo ID :
export type MyRequest = { ID: string, Name?: string }; function process(jsonData:string) { try { let data: MyRequest = JSON.parse(jsonData); return data } catch (err) { console.log("Error:", err) } } let jsonData = JSON.stringify( { foo: "bar" } ); let result = process(jsonData); console.log(result); ¿Cómo editar el process de la función para que se equivoque si los datos de la cadena entrante no contienen el atributo de ID requerido por el type MyRequest ?
JSON.parse es una función de JavaScript, su interfaz es TypeScript. JavaScript no tiene forma de interactuar con la interfaz en tiempo de ejecución para hacer cumplir que todas las propiedades en su interfaz existan durante el análisis, por lo que no puede producir un error en la forma en que presenta su ejemplo.
Para hacer esto, debe tener verificaciones de JavaScript que validen que su JSON analizado coincida con lo esperado. Algo como
export type MyRequest = { ID: string, Name?: string }; function isMyRequest(json: any): json is MyRequest { return json && Object.prototype.hasOwnProperty.call(json, 'ID'); } function process(jsonData:string) { try { let data: MyRequest = JSON.parse(jsonData); if (!isMyRequest(data)) { throw new Error('invalid jsonData'); } return data; } catch (err) { console.log("Error:", err) } } let jsonData = JSON.stringify( { foo: "bar" } ); let result = process(jsonData); console.log(result);