Q:

Sintaxe TypeScript

Estou estudando TypeScript porém não entendo qual o significado deste exemplo:
interface Person {
    firstname: string;
    lastname: string;
}

function greeter(person : Person) {
    return "Hello, " + person.firstname + " " + person.lastname;
}

Não entendo o uso do interface. Pelo que entendi, ele define uma espécie de novo "tipo" de variável, que nesse exemplo está sendo usado no trecho person : Person (outro trecho que não entendo), porém no script compilado não parece ter efeito algum:
function greeter(person) {
    return "Hello, " + person.firstname + " " + person.lastname;
}

Compilando apena o código abaixo, o resultado é o mesmo. Alguém poderia me ajudar a entender este ponto da sintaxe?
function greeter(person) {
    return "Hello, " + person.firstname + " " + person.lastname;
}

A:

TypeScript é um superconjunto de Javascript, o objetivo da linguagem é fornecer uma tipagem forte para que programadores acostumados com C# escrevam Javascript de uma maneira mais "confortável". O código TypeScript não é executado no final, ele deverá ser "compilado" e o resultado será sempre um código Javascript. 
O uso da interface no exemplo que você citou, "existe" apenas enquanto você está escrevendo o código TypeScript:
interface Person {
    firstname: string;
    lastname: string;
}

Esse código será útil para que o compilador, assim como a IDE do Visual Studio entenda que o objeto person possui apenas membros firstname e lastname
function greeter(person : Person) {
    return "Hello, " + person.firstname + " " + person.lastname;
}

Pra que isso serve? Para evitar que cometamos erros, incluir suporte a intellisense e uma gama de recursos similares aos que o Visual Studio oferece com C# (renomear variáveis, ir até a definição de um membro, etc). 
Nesse exemplo, ao contrário de Javascript, em TypeScript o compilador não permitiria que tentássemos acessar um membro não declarado do objeto person: 
person.age; // isso retornaria um erro de compilação

Uma vantagem que experimentei e gostei muito foi a possibilidade de baixar pacotes de definição de bibliotecas existentes (procure no nuget por typescript DefinitelyTyped) como jquery, googlemaps api, para serem incluídos como referência em arquivos TypeScript. Achei uma maravilha a experiência de usar a API do Google Maps com intellisense, sem precisar ir buscar a documentação a cada instante.
Em suma, o objetivo TypeScript é manter a sintaxe de Javascript (é possível escrever apenas código Javascript mesmo em TS) incluindo tipagem forte com suporte a escrita de classes, com herança e polimorfismo enquanto estamos escrevendo nosso código.

