2013-09-24 2 views
0

Если я пытаюсь определить класс с таким же именем, как тип, который импортируется автоматически машинопись, такой, какСкрытие импорта из Машинописи «прелюдии»

class Map { 
} 

тогда я получаю следующую ошибку

error TS2000: Duplicate identifier 'Map'. 

Я хотел бы сделать это, чтобы иметь возможность переименовать или полностью исключить тип библиотеки классов TypeScript Map, чтобы я мог определить свое имя с тем же именем.

Использование моего Map в модуле (согласно одному из ответов ниже) помогает, но я по-прежнему не могу ссылаться на него по неквалифицированному имени (т. Е. Путем импорта), хотя на этот раз нет жалобы на дублирующие имена;

Пусть A.ts содержит::

module A { 
    export class Map { 
    } 
} 

и B.ts содержит: импорт просто не делает ничего

/// <reference path='A.ts'/> 

import Map = A.Map 

function test (m: Map) { 
} 

Для того, чтобы сделать эту компиляцию Мне нужно заменить m: Map на m: A.Map. В противном случае компилятор жалуется, что мне не хватает каких-то общих аргументов, потому что он предполагает, что я имею в виду тип Map из прелюдии TypeScript.

Я чувствую, что я должен иметь возможность определить «локальное» имя (через явное объявление или через импорт), которое скрывает любое эквивалентное определение в прелюдии; или я должен иметь возможность вручную отключать импорт определенных типов из прелюдии (как я могу в Haskell).

ответ

2

Поместите свой класс внутри модуля ..

module SomeNamespace { 
    class Map { 
    } 
} 

Это сделает ваш класс уникальным от класса карты по умолчанию.

+0

Замечательный ответ +1, я хотел бы упомянуть, что для 'или вообще не импортировать класс библиотеки классов TypeScript 'существует флаг компилятора, чтобы исключить * все * внутри' lib.d.ts' с помощью ' noLib', а затем использовать пользовательский 'lib.d.ts'. Но я бы посоветовал не использовать это и работать вокруг него, как вы упомянули, чтобы сохранить жизнь простой :) – basarat

+0

Спасибо. Это работает, но, к сожалению, я не могу ссылаться на свою «Карту» по неквалифицированному имени. Обновил мой вопрос. Однако, я думаю, я приму этот ответ, если нет никакого способа обойти это. (Предложение @ basarat немного резкое :) – Roly

+0

Возможно это? http://www.typescriptlang.org/Playground/#src=module%20SomeNamespace%20%7B%0A%09class%20Map%20%7B%0A%09%09Foo()%20%7B%0A%09%09 % 09% 0A% 09% 09% 7D% 0A% 09% 7D% 0A% 09% 0A% 09class% 20SomethingElse% 20% 7B% 0A% 09% 09constructor()% 20% 7B% 0A% 09% 09% 09var % 20map% 20% 3D% 20new% 20Map()% 3B% 20% 2F% 2F% 20Sorta% 20unqulified% 20reference ...% 0A% 09% 09% 09map.Foo()% 3B% 0A% 09% 09% 7D% 0A% 09% 09% 0A% 09% 7D% 0A% 7D –

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