Ответ 1
Это обычно называют "типами профсоюзов". Система типа TypeScript от 1.4 позволяет это сделать.
Смотрите: Расширенные типы
Если у меня есть свойство, которое может быть строкой или логическим, как это определить:
interface Foo{
bar:string;
bar:boolean;
}
Я не хочу прибегать к:
interface Foo{
bar:any;
}
Я не думаю, что это возможно без any
. Вы можете ответить на любой из этих вопросов:
Я пропустил спецификацию и ее возможности прямо сейчас? Планируется ли что-то подобное? Был зарегистрирован запрос функции: http://typescript.codeplex.com/workitem/list/basic? (ОБНОВЛЕНИЕ это отчет о проблеме, на который вы можете проголосовать https://typescript.codeplex.com/workitem/1364)
Я бы предположил что-то вроде этого:
interface Foo{
bar:string;
bar:boolean;
bar:any;
}
var x:Foo = <any>{};
x.bar="asdf";
x.bar.toUpperCase(); // intellisence only for string
Это обычно называют "типами профсоюзов". Система типа TypeScript от 1.4 позволяет это сделать.
Смотрите: Расширенные типы
По состоянию на 2015 год работают профсоюзные типы:
interface Foo{
bar:string|boolean;
}
Не сказать, что это отвечает на ваш вопрос, но можете ли вы прибегнуть к чему-то подобному?
interface Foo<T>{
bar:T;
}
function createFoo<T>(bar:T) : Foo<T>{
return {bar:bar};
}
var sFoo = createFoo("s");
var len = sFoo.bar.length;
var bFoo = createFoo(true);
var result = bFoo.bar === true;