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
:
-
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"
. -
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 enlib
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"],
...
},
}