2017-03-03 60 views
8

是否有可能限制param不接受字符串,数组等?Typescript没有属性的限制类型接受字符串或数组

interface foo { 
    a?: number; 
    b?: string; 
} 

function baz(param: foo) { 
} 

baz("hello"); 
+1

你为什么在意?如果它适合你的界面,你为什么介意它是一个字符串还是一个对象? –

+2

我们有一个错误,我们传递对象的属性而不是对象,并且打字稿编译得很好。 – user3233089

+0

这是一个值得关注的问题。 –

回答

5

你可以做这样的事情,使baz接受至少一个对象:

interface foo { 
    a?: number; 
    b?: string; 
} 

interface notAnArray { 
    forEach?: void 
} 

type fooType = foo & object & notAnArray; 

function baz(param: fooType) { 
} 

baz("hello"); // Throws error 
baz([]); // Throws error 

fooType这里是一个Intersection Type

+0

是不是有点欺骗?你迫使参数必须是一个对象。 –

+1

@MuratK:那不是OP想要的吗?但我会倾向于不把它变成一种类型,只是'功能baz(param:foo&object)' –

+1

值得注意的是'object'类型是非常新的,你需要TypeScript 2.2来使用它。 –

相关问题