84

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

interface Foo{
    bar:string;
    bar:boolean;
}

我不想诉诸于:

interface Foo{
    bar:any;
}

我认为没有它是不可能的any。你可以回答以下任何一个:

我现在是否忽略了一个规范及其可能?有这样的计划吗?是否记录了功能请求?

我会想象这样的事情:

interface Foo{
    bar:string;
    bar:boolean;
    bar:any; 
}

var x:Foo = <any>{};
x.bar="asdf";
x.bar.toUpperCase(); // intellisence only for string 
4

4 回答 4

188

截至 2015 年,联合类型的工作:

interface Foo {
    bar:string|boolean;
}
于 2016-02-19T04:31:56.027 回答
58

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

请参阅:高级类型

于 2013-08-02T00:24:10.507 回答
9

Not saying this answers your question, but could you resort to something like this?

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;
于 2013-08-02T18:31:03.590 回答
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(),
};
于 2021-03-07T15:15:22.323 回答