2013-08-05 2 views
1

Почему первый пример компилируется, но второй генерирует «Поставляемые параметры не соответствуют какой-либо сигнатуре целевого вызова?»Интерфейсы дескрипторов ведут себя по-разному, когда используются как часть вызова конструктора против регулярной функции?

interface Foo { 
    s: string; 
} 

// example 1: 
function abc(p: Foo[]) {  
} 

// ok 
abc([{s: ''}]); 


// example 2: 
class Blah { 
    constructor(p: {stuff: Foo[]}) { 
    } 
} 

// not ok: Supplied parameters do not match any signature of call target 
var obj = new Blah({stuff: [{s: ''}]}); 

ответ

2

Это была ошибка в компиляторе. Это исправлено; следующий релиз, в котором будет исправлено 0,91.

1

Единственное, что я хотел бы добавить, что если вы создаете интерфейс для stuff он будет работать:

interface Foo { 
    s: string; 
} 

interface Stuff { 
    stuff: Foo[]; 
} 

// example 1: 
function abc(p: Foo[]) {  
} 

// ok 
abc([{s: ''}]); 


// example 2: 
class Blah { 
    constructor(p: Stuff) { 
    } 
} 

var obj = new Blah({stuff: [{s: ''}]}); 

See it in the TypeScript Playground.

Смежные вопросы