Reputation:
I would like to have an array that holds string error messages. Here's the code that I came up with:
var errors: [string];
errors = [];
Object.keys(response.data.modelState).forEach(function (key) {
errors.push.apply(errors, response.data.modelState[key]);
});
I tried some different ways to add a typescript definition to the variable errors but none seem to work for this case. The first definition works okay but then when I am pushing values I need to push to an array and when I set:
errors = [];
Then it gives me an error message:
Severity Code Description Project File Line Error TS2322 Type 'undefined[]' is not assignable to type '[string]'. Property '0' is missing in type 'undefined[]'. Severity Code Description Project File Line Error Build: Type 'undefined[]' is not assignable to type '[string]'.
Upvotes: 42
Views: 88540
Reputation: 16651
Missing an obvious answer, needed when not assigning it to a variable: [] as string[]
Upvotes: 20
Reputation: 7274
An alternative is to set the length
to 0
:
const myArray = [1, 2, 3, 4]
myArray.length = 0
This makes it possible to use const
in contexts where emptying the array is needed.
Upvotes: 0
Reputation: 123901
The definition of string array should be:
// instead of this
// var errors: [string];
// we need this
var errors: string[];
errors = [];
Note: another issue could be the parameter key here
...forEach(function (key) {...
I would guess that we often should declare two of them, because first is very often value, second key/index
Object.keys(response.data.modelState)
.forEach(function (value, key) {
errors.push.apply(errors, response.data.modelState[key]);
});
And even, we should use arrow function, to get the parent as this
Object.keys(response.data.modelState)
.forEach( (value, key) => {
errors.push.apply(errors, response.data.modelState[key]);
});
Upvotes: 41