Примитивные типы Typescript: любая разница между типами "number" и "Number" (без учета регистра TSC)?
Я хотел написать параметр типа number
, но я неправильно указал тип, пишет .
на моей IDE (JetBrains WebStorm) тип Number
пишется тем же цветом, который используется для примитивного типа number
, в то время как если я пишу имя класса (известного или неизвестного), он использует другой цвет, поэтому я предполагаю, что каким-то образом он распознает тип с ошибкой как правильный/почти правильный/вид правильного типа.
когда я компилирую код, вместо этого например, жалобы на то, что компилятор не смог найти класс с именем Number
, TSC пишет это сообщение об ошибке:
Illegal property access
значит number
и Number
оба сосуществуют как разные типы?
если это правда, в чем разница между этими классами?
если это не так, то почему он просто не написал то же сообщение об ошибке, которое он отображает для неизвестных классов ("имя " номер" не существует в текущем scope")
этот код:
class Test
{
private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];
// THIS WORKS
public getValue(index:number):string
{
return this.myArray[index];
}
// THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS
public getAnotherValue(index:Number):string
{
return this.myArray[index];
}
}
2 ответов
JavaScript имеет понятие первобытное типы (число, строка и т. д.) и объект типы (число, строка, и т. д., которые проявляются во время выполнения). TypeScript types number
и Number
относятся к ним соответственно. JavaScript обычно принуждает тип объекта к его примитивному эквиваленту или наоборот:
var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
системные правила типа TypeScript имеют дело с этим (раздел 3.7 спецификации) следующим образом:
для целей определение подтипа, супертипа и назначения отношения совместимости, число, логический и строковый примитив типы рассматриваются как типы объектов с теми же свойствами, что Интерфейсы "Number", "Boolean" и "String" соответственно.
чтобы дополнить ответ Райана руководством от машинопись делать и чего не делать:
никогда не используйте типы Number, String, Boolean или Object. Эти типы относятся к непримитивным коробочным объектам, которые почти никогда не используются должным образом в коде JavaScript.
/* WRONG */ function reverse(s: String): String;
используйте типы number, string и boolean.
/* OK */ function reverse(s: string): string;