如果我有一个可能是字符串或布尔值的属性,我该如何定义它:
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
答案 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(),
};