我在返回类型安全的打字稿v3.5数组而未在方法主体中声明它时遇到了麻烦。该数组应包含多个字符串数组。
我想做这样的事情:
foo(): Array<Array<string>>:
// do something
return new Array<Array: string>>
奖金:如何返回一个数组,其中包含数组而不在代码主体中声明所有这些数组?
更新:
foo(): Array<Array<string>> {
// calculation of 'someSize' and 'anotherSize'
// init of both arrays:
let tempPartOfSpeechArr: string[] = new Array(someSize);
let tempLinguisticUsageArr: string[] = new Array(anotherSize);
let arrContainer = new Array(2);
arrContainer[0] = tempPartOfSpeechArr;
arrContainer[1] = tempLinguisticUsageArr;
return arrContainer;
实际上,我只想返回包含两个数组的arrContainer。我尽量减少代码行,但不想降低可读性
答案 0 :(得分:1)
您可以只返回数组文字的结果:
foo(): Array<Array<string>> {
// calculation of 'someSize' and 'anotherSize'
// init of both arrays:
let tempPartOfSpeechArr: string[] = new Array(someSize);
let tempLinguisticUsageArr: string[] = new Array(anotherSize);
return [tempPartOfSpeechArr, tempLinguisticUsageArr]; // <===================
}
首先可以处理TypeScript的任何人都应该知道这一点。 :-)
侧面说明:几乎没有任何理由使用new Array
或预定义数组的长度。这些行:
let tempPartOfSpeechArr: string[] = new Array(someSize);
let tempLinguisticUsageArr: string[] = new Array(anotherSize);
可以更简单和惯用地是:
let tempPartOfSpeechArr: string[] = [];
let tempLinguisticUsageArr: string[] = [];
唯一的区别是您的原始代码创建了 sparse 数组(它们的length
大于0,但其中没有任何条目),而经修改的代码则没有。通常,请避免使用稀疏数组,因为稀疏数组可能会破坏旨在使用真实数组的JavaScript引擎优化。
旁注2:您正在为数组混合两种不同样式的类型修饰符。 foo
的返回类型声明为Array<Array<string>>
,但是您正在使用特定于数组的语法string[]
声明数组。这样做很好,但是您可以考虑通过将foo
声明为string[][]
来使用数组语法:
foo(): string[][] {
// ....
完整示例(on the playground),返回一个包含两个数组的数组,第一个包含字符串中唯一的非数字,第二个包含字符串中唯一的数字:
function ex(str: string): string[][] {
const a: string[] = [...new Set(str.replace(/\d/g, ""))];
const b: string[] = [...new Set(str.replace(/\D/g, ""))];
return [a, b];
}
console.log(ex("Testing 1 2 3 testing"));
// =>
// [
// ["T", "e", "s", "t", "i", "n", "g"],
// ["1", "2", "3"]
// ]