Fla*_*rna 9 typescript typescript2.2
我有使用对象作为参数的函数,如下所示:
interface Options {
foo?: string;
bar?: number;
};
function fooNction(opts: Options): void {
}
Run Code Online (Sandbox Code Playgroud)
这在某些情况下工作正常,但不是全部:
fooNction({foo: "s"}); // OK
fooNction({a: "x"}); // fine as TS gives an Error as expected
fooNction("hello"); // no Error...
Run Code Online (Sandbox Code Playgroud)
我试图像这样从 TS 2.2 对象类型扩展我的接口
interface Options extends object {
foo?: string;
bar?: number;
};
Run Code Online (Sandbox Code Playgroud)
禁止基本类型,但打字稿告诉“不能很好地命名‘对象’”。
有什么方法可以定义接口必须是对象但没有必填字段?
出于某种原因,不允许有扩展内置类型的接口,如object或string。您可以通过声明类型别名试图绕过object这样
type ObjectAlias = object;
interface Options extends ObjectAlias {
...
}
Run Code Online (Sandbox Code Playgroud)
但它仍然不起作用,因为结构兼容性用于类型检查接口:
function fooNction(opts: Options): void {
}
fooNction("hello"); //ok
Run Code Online (Sandbox Code Playgroud)
所以它似乎object只能用于交集类型,并且您必须声明Options为类型,而不是接口才能使其工作:
type Options = object & {
foo?: string;
bar?: number;
};
function fooNction(opts: Options): void {
}
fooNction("hello"); //error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6781 次 |
| 最近记录: |