声明具有相同类型的多个TypeScript变量

时间:2015-12-11 20:48:20

标签: typescript

我正在编写一个大型的TypeScript类,并且我将noImplicitAny设置为true。有没有办法在同一行上声明相同类型的多个变量?

我想将x和y声明为数字,例如“x,y:number”。但是编译器不喜欢那个或者我尝试过的任何其他东西。是否有更好的替代“x:number; y:number”?

12 个答案:

答案 0 :(得分:43)

没有任何语法能够以更好的方式完成此任务,而不仅仅是编写类型两次。

答案 1 :(得分:9)

是的,您可以像这样:-)一行

public AcccountNumber: number;public branchCode:number;

请不要低估我的幽默感:-)

答案 2 :(得分:6)

这个怎么样?将array deconstruction与Typescript的array type一起使用。

let [x,y]: number[]

但是请注意,如果不打开pedantic index signature check,此功能将不安全。 例如,以下代码即使应该也不会出现编译错误:

let [x, y]: number[] = [1]
console.log(x.toString()) // No problem
console.log(y.toString()) // No compile error, but boom during runtime 

答案 3 :(得分:4)

即使您执行以下操作,也只需添加:

{{1}}

它仍然不起作用。在这种情况下,notes被声明为type any,signatureTypeName被声明为string类型。您可以通过将鼠标悬停在变量上来验证所有这些,例如在Visual Studio Code中。然后在弹出窗口中显示声明的类型。

答案 4 :(得分:0)

例如让isFormSaved,isFormSubmitted加载:boolean = false; 该语法仅在功能块中有效,而在typescript导出类文件中则无效。不知道为什么。

例如:

export class SyntaxTest {

public method1() {
    e.g. let isFormSaved, isFormSubmitted, loading: boolean = false;
}

}

答案 5 :(得分:0)

let [string1, string2]: string[] = [];

分解:

  • 在左侧,整个[string1, string2]被声明为string[],这意味着string1, string2的类型为string
  • 要进行分解,您需要将其分配给某物,这里为空数组[]
  • 右手边的空数组为[undefined, undefined, undefined, ...] 将解构string1string2分配给undefined
  • 最终string1, string2的类型为string,值undefined

答案 6 :(得分:0)

您必须在每个变量上指定类型:

let x: number, y: number

答案 7 :(得分:0)

这是我使用的另一种选择。

export type CoordinatesHome = {
    lat?: number;
    long?: number;
};

export type CoordinatesAway = CoordinatesHome;

答案 8 :(得分:-1)

如果您可以接受孤儿变量。 Array destructuring可以做到这一点。

var numberArray:number[]; //orphan variable
var [n1,n2,n3,n4] = numberArray;
n1=123; //n1 is number
n1="123"; //typescript compile error

更新:以下是针对ECMAScript 6时生成的Javascript代码。

var numberArray; //orphan variable
var [n1, n2, n3, n4] = numberArray;
n1 = 123; //n1 is number

在定位ECMAScript 5时生成的JS代码,就像Louis在下面说的那样,它并不漂亮。

var numberArray; //orphan variable
var n1 = numberArray[0], n2 = numberArray[1], n3 = numberArray[2], n4 = numberArray[3];
n1 = 123; //n1 is number

答案 9 :(得分:-1)

不推荐,但是:

interface Name {[name:string]: T } or type Name{[name:string]: T}

示例:type test = {[Name: string]:string}

示例:interface {[Name: string]:boolean}

这有效。 Typescript文档中提供了另一个用例示例。 Typescript Handbook

答案 10 :(得分:-3)

可以在两侧使用数组解构为多像素分配值

[startBtn, completeBtn, againBtn] = [false, false, false];

答案 11 :(得分:-4)

让我们注意:string ='',signatureTypeName ='';