Saltar al contenido

TypeScript me dice que la propiedad ‘padStart’ no existe en el tipo ‘string’. ¿Por qué?

Solución:

padStart se define en el ES2017 estándar. Necesita decirle a mecanografiado que use los tipos apropiados (los de ES2017). Puede hacer esto configurando el objetivo en ES2017, si su tiempo de ejecución admite todas las funciones de idioma requeridas por ES2017 (que probablemente no sea el caso en el momento de escribir este artículo).

Otra opción es simplemente configurar el libs opción para obtener los tipos de objetos en tiempo de ejecución de acuerdo con ES2017 pero aún compile en la versión de idioma a la que se dirige. (Tenga en cuenta que el tiempo de ejecución en sí debe admitir padStart, el mecanografiado no proporcionará ningún relleno de polietileno)

Puedes hacer esto en tsconfig utilizando el lib opción:

"compilerOptions": {
    "target": "es2016",
    "lib": [
        "es2017",
        "dom"
        "scripthost"
    ],
    // ...

}

Puede leer más sobre lib vs target en esta respuesta

TypeScript asume de forma predeterminada que su código transpilado se ejecutará en el peor entorno posible (por ahora, espero, realmente el peor), es decir, en un navegador que solo admita ES5. String.prototype.padStart es una función experimental compatible solo en ES2017, por lo que TypeScript no puede estar seguro de que en tiempo de ejecución estará aquí y listo.

Si sabe que este “caso más desfavorable” no aparecerá (no se orienta a navegadores antiguos o utiliza polyfills), puede realizar uno de los siguientes cambios en su tsconfig.json:

  1. Cambie su objetivo de transpilación. Esto obliga a sus consumidores a tener tiempo de ejecución ES2017 (o más reciente), pero no requiere más esfuerzo por su parte. En este caso, establezca target: "es2017".

  2. Cambie la lista de bibliotecas disponibles. En este caso, si no está seguro de que sus clientes serán lo suficientemente modernos, debe proporcionarles polyfills para los elementos ES2017 que está utilizando. En este caso, agregue "es2017" a la matriz en lib parámetro (si estaba vacío, entonces será lib: ["es2017"]).

Para que TypeScript sea consciente de String.prototype.padStart (), debe especificar es2017 en la lista de bibliotecas en su tsconfig.json. Si lo hace, TypeScript asumirá que se pueden usar todas las funciones de ES2017, lo que podría no ser exactamente lo que desea.

Las plataformas como Node.js no siempre implementan el conjunto completo de funciones de una nueva especificación del lenguaje ECMAScript, por lo que es más seguro agregar solo las funciones del lenguaje donde está seguro de que existen. Si no está seguro de qué funciones son compatibles con su plataforma de destino, puede buscarlas en páginas como node.green o en la lista de compatibilidad del navegador MDN.

los padStart La función es parte del prototipo String, por lo que basta con agregar es2017.string en tus tsconfig.json:

{
  "compilerOptions": {
    "lib": ["es6", "es2017.string"],
    ...
  },
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *