2013-03-21 2 views
1

Скажем, у меня есть test.ts и файл MY_MODULE.d.ts:Требуется ли литье в TypScript для этого простого случая?

MY_MODULE.d.ts:

module MY_MODULE 
{ 
    export class Config { 
     UserId : string; 
    }; 

    export function Init(config : Config); 
} 

test.ts:

/// <reference path="MY_MODULE.d.ts" /> 

MY_MODULE.Init(<MY_MODULE.Config>{ UserId: 'Josh' }); 

Мой вопрос: можно ли исправить файл определения или файл .ts так, чтобы приведение в него было ненужным?

+0

машинопись не JavaScript. Я не вижу причин помечать простой вопрос в TypeScript как JavaScript. –

+0

Nitpicking, но я бы упомянул его утверждение типа типа (не кастинг). – basarat

+0

Документация не вызывает это литье. Однако этот пост в блоге только что сделал: http://blogs.msdn.com/b/typescript/archive/2013/03/25/working-on-typescript-0-9-generics-overload-on-constants-and-compiler -performance.aspx quote: «В TypeScript 0.8 код выше потребовал бы дополнительного приведения» – basarat

ответ

2

Использовать export interface Config вместо export class Config.

+0

Не можете ли вы даже опустить 'export' внутри файла' * .d.ts'? – MiMo

+1

Правильно, это необязательно. –

0

TypScript выведет правильный тип на основе сигнатуры объекта, поэтому приведение не требуется.
Копирование кода на игровой площадке, сразу же были собраны несколько ошибок компиляции. Во-первых, Init нуждается в реализации.
Во-вторых, класс Config не имеет конструктора.
Следующий код компилируется:

module MY_MODULE 
{ 
    export class Config { 
     UserId : string; 
    }; 

    export function Init(config : Config) { 
    } 
} 

var myConfig = new MY_MODULE.Config(); 
myConfig.UserId = 'Josh' 

MY_MODULE.Init(myConfig); 

Было бы лучше, чтобы определить конструктор для Config следующим образом:

module MY_MODULE 
{ 
    export class Config { 
     UserId : string; 
     constructor(userId : string) { 
      this.UserId = userId; 
     } 
    }; 
    export function Init(config : Config) { 
    } 
} 

MY_MODULE.Init(new MY_MODULE.Config('Josh')); 
+0

MY_MODULE - это файл в формате .d.ts. Там нет никакой реализации. –

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