машинопись неопределенная переменная фундаментальная - PullRequest
0 голосов
/ 28 ноября 2018

Недавно перешел с C # на TypeScript.Ниже код работает нормально и без ошибок.Однако я подозреваю, что я не понял некоторые фундаментальные TS, поскольку мы просто определяем интерфейсы и используем их как объекты / классы.Как правильно объявить переменную типа, определенного в интерфейсе, а затем назначить эту переменную своему типизированному объекту.

let tempCompany = Company|undefined; 
// I get error if I remove undefined in above line.
// Company is an interface with many properties
tempCompany = this.someArrayOfCompanies.find(x => x.zipCode === 65432);
if (tempCompany !== undefined) { 
    // error if I do not do this if check in above line
    console.log(tempCompany.SalesFigure);
}

Обновление: возможный ответ на основе обратной связи ниже.Для новичков, таких как я, переходящих в TS из .Net / C #, возникает путаница, потому что в C # мы называем интерфейсы, такие как IAnimal (), а затем имеем класс с именем Dog, который реализует IAnimal ().В TS у нас есть интерфейс Animal (без I), который назван так, чтобы TS intellisense работал в коде.Дополнительно, когда вы заходите в Angular, он возвращает наблюдаемый список типа Animal.В основном TS лучше, чем JS, но все же есть все эти сумасшедшие вещи.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Определите переменную типа Company следующим образом:

let tempCompany: Company;

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

tempCompany = this.someArrayOfCompanies.find(x => x.zipCode === 65432);
0 голосов
/ 28 ноября 2018

Может быть, этот маленький пример прояснит для вас вещи.

interface Animal {
    legs: number;
}

var dog: Dog = { legs: 4 };

type canine = typeof dog;
...