TypeScript Array: .map () не является функцией

Вы можете отобразить имя переменной с помощью препроцессора. Например,

#include 
#define quote(x) #x
class one {};
int main(){
    one A;
    std::cout<

выводит

3one    A

на мою машину. # изменяет токен в строку после предварительной обработки строки

std::cout<

Конечно, если вы сделаете что-то вроде

void foo(one B){
    std::cout<

, вы получите

3one B

, поскольку компилятор не отслеживает все имена переменных.

Как это происходит в gcc, результат typeid (). name () - это искомое имя класса, получить demangled version использовать

#include 
#include 
#define quote(x) #x
template  class one{ };
int main(){
    one > A;
    int status;
    char * demangled = abi::__cxa_demangle(typeid(A).name(),0,0,&status);
    std::cout<

, который дает мне

one > A

Другие компиляторы могут использовать разные схемы именования.

0
задан Jyosua 18 March 2019 в 20:34
поделиться

1 ответ

Добавление <Array<Item>> на самом деле не превратит объект в массив, это просто приведение к тому, чтобы машинописание воспринимало его как массив, и вообще не влияет на созданный javascript.

Проблема в том, что оператор распространения, который вы используете для клонирования вашего массива, создает общий объект, а не массив:

this.selectedItems = {...selectedItems};

Синтаксис {...obj}

копирует собственные перечисляемые свойства из предоставленного объекта в новый объект. Источник

Таким образом, результирующий объект имеет свойство длины и все пронумерованные свойства массива, в который вы передали, но это объект, а не массив и поэтому не ' у нас есть методы Array.prototype.

Однако вы можете использовать оператор распространения для клонирования массива, вам просто нужно использовать квадратные скобки, чтобы обозначить, что вы создаете массив:

this.selectedItems = [...selectedItems];

Вы также можете клонировать массив, используя слайс :

this.selectedItems = selectedItems.slice(0);
0
ответ дан rh16 18 March 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: