typescript - TS-fel: Typen 'string' är inte en arraytyp eller en strängtyp. Hur kan en sträng inte vara en sträng?
TS kastar ett konstigt fel:
Fel:(125, 18) TS2569: Typen 'string' är inte en arraytyp eller en strängtyp. Använd kompilatoralternativet '--downlevelIteration' för att tillåta iteration av iteratorer.
Hur kommer det sig att en sträng inte är en sträng?
Jag vill se hur TS kommer att kompilera spridningsoperatorn för en sträng.
Min kod i webbläsarkonsolen. En sträng delas upp i tecken:
> s = 'abcdef';
> r = [...s];
< (6) ["a", "b", "c", "d", "e", "f"]
Min kod i TS:
const s: string = 'abcdef';
const res = [...s]; // <= Error: Type 'string' is not an array type or a string type
console.log(res);
Varför?
TS-version:
"dependencies": {
"typescript": "^3.5.3"
}
UPD :
@VtoCorleone En skärmdump
UPD :
Min tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"downlevelIteration": false,
"allowJs": true,
"skipLibCheck": false,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"alwaysStrict": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": false,
"noEmit": false,
"sourceMap": true,
"baseUrl": "./",
"jsx": "preserve"
},
"compileOnSave": true,
"files": [
"sample.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Svar #1
För att utveckla Heretic Monkeys kommentar:
Att ändra målet från es5 till es2015 eller es6 löser problemet. Här är min fullständiga tsconfig.json för tydlighetens skull:
{
"compilerOptions": {
"target": "es2015",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
},
"exclude": [
"node_modules"
],
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx"
]
}
Arbetande exempel
Sidonotering: "downlevelIteration": true fixade det också, men det verkar inte vara den korrekta lösningen för mig.
Svar #2
Jag har Angular-CLI (8) - i mitt fall hjälper inte ändringen av tsconfig.json i nyckeln "target": "es2015" (eller es2018) alls. Endast att lägga till "downlevelIteration": true hjälper. Här är hela min fil
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "esnext",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"downlevelIteration": true,
"target": "es2015",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
}
}