成员的多种类型签名,TypeScript中的联合类型

时间:2013-08-01 22:57:57

标签: typescript

如果我有一个可能是字符串或布尔值的属性,我该如何定义它:

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 

4 个答案:

答案 0 :(得分:112)

截至2015年,工会类型工作:

interface Foo {
    bar:string|boolean;
}

答案 1 :(得分:40)

这通常被称为“联合类型”。 1.4中的TypeScript类型系统允许这样做。

请参阅:Advanced Types

答案 2 :(得分:7)

不是说这回答了你的问题,但是你可以诉诸这样的事情吗?

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;

答案 3 :(得分:0)

类似的东西?

interface Base<T, T2> {
  a: T;
  b: T2;
}

type FirstExtendedBase = Base<boolean, string>;

const exampleOne: FirstExtendedBase = {
  a: false,
  b: '',
};

type SecondExtendedBase = Base<number, Date>;

const exampleTwo: SecondExtendedBase = {
  a: 42,
  b: new Date(),
};