TypeScript 联合类型不能用作数组
TypeScript union type cannot be used as an array
这是我能够将问题减少到:
interface Word {
value: string | string[];
}
const w: Word = {
value: [] as string[]
// also tried:
// value: []
// value: ['test']
}
w.value.push('')
我的 IDE 中的最后一行错误,因为 “push”对于类型“string | string[]”不存在 (ts2339)。它也不会编译!
这是一个错误吗?是特色吗?如何帮助这个?
[] as string[]
在您的代码中并没有真正做太多事情,因为从用法中已经很清楚这个数组将是一个字符串数组,然后您将对象分配给 Word
。您定义了 Word
以便值可以是字符串或字符串数组,虽然您可能从数组开始,但您定义的类型表示您可以将其更改为不同行上的字符串代码。由于该值可能不是数组,除非您首先验证它是一个数组,否则打字稿不会让您推送它。
例如:
if (Array.isArray(w.value)) {
w.value.push('');
} else {
w.value = [w.value, ''];
}
如果您希望 w
成为更窄的类型,类似于 Word
但保证值始终为数组,则执行此操作:
const w: Word & { value: string[] } = {
value: []
}
这是我能够将问题减少到:
interface Word {
value: string | string[];
}
const w: Word = {
value: [] as string[]
// also tried:
// value: []
// value: ['test']
}
w.value.push('')
我的 IDE 中的最后一行错误,因为 “push”对于类型“string | string[]”不存在 (ts2339)。它也不会编译!
这是一个错误吗?是特色吗?如何帮助这个?
[] as string[]
在您的代码中并没有真正做太多事情,因为从用法中已经很清楚这个数组将是一个字符串数组,然后您将对象分配给 Word
。您定义了 Word
以便值可以是字符串或字符串数组,虽然您可能从数组开始,但您定义的类型表示您可以将其更改为不同行上的字符串代码。由于该值可能不是数组,除非您首先验证它是一个数组,否则打字稿不会让您推送它。
例如:
if (Array.isArray(w.value)) {
w.value.push('');
} else {
w.value = [w.value, ''];
}
如果您希望 w
成为更窄的类型,类似于 Word
但保证值始终为数组,则执行此操作:
const w: Word & { value: string[] } = {
value: []
}