如何声明一个在打字稿中

时间:2019-07-06 09:55:04

标签: typescript

我在返回类型安全的打字稿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。我尽量减少代码行,但不想降低可读性

1 个答案:

答案 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"]
// ]