如何告诉typescript值存在?

如何告诉typescript值存在?,typescript,Typescript,我有以下代码 options: { url?: string } = {}; if (!Checker.present(this.options.url)) { throw new Error('Options must have a url'); } new CustomUrl(this.options) 但是我得到了一个错误,因为CustomUrl需要一个url,并且我的接口是可选的 我的checked函数如下所示 static present(va

我有以下代码

   options: { url?: string } = {};
   if (!Checker.present(this.options.url)) {
      throw new Error('Options must have a url');
   }
   new CustomUrl(this.options)
但是我得到了一个错误,因为CustomUrl需要一个url,并且我的接口是可选的

我的checked函数如下所示

  static present(value: any) {
    return value !== undefined && value !== null;
  }
但我如何告诉typescript我检查了,并且该值存在?算着我不能用这个!在我的代码中,使用as断言对象具有url属性:

new CustomUrl(this.options as { url: string });
new CustomUrl(this.options as Options & { url: string });
对于更一般的情况,可以使用&{url:string}将可选接口与所需的url属性组合:

new CustomUrl(this.options as { url: string });
new CustomUrl(this.options as Options & { url: string });
其中Options是初始选项的类型。

使用as断言对象具有url属性:

new CustomUrl(this.options as { url: string });
new CustomUrl(this.options as Options & { url: string });
对于更一般的情况,可以使用&{url:string}将可选接口与所需的url属性组合:

new CustomUrl(this.options as { url: string });
new CustomUrl(this.options as Options & { url: string });
其中选项是初始选项的类型。

一种方法是。 您需要在CustomUrl函数内部而不是外部断言url的存在


interface IOpt{
    { url?: string } 
}

function CustomUrl(opt:Required<IOpt>){
}
另一种方式。 您需要将CustomUrl参数更改为Required


interface IOpt{
    { url?: string } 
}

function CustomUrl(opt:Required<IOpt>){
}
一种方法是。 您需要在CustomUrl函数内部而不是外部断言url的存在


interface IOpt{
    { url?: string } 
}

function CustomUrl(opt:Required<IOpt>){
}
另一种方式。 您需要将CustomUrl参数更改为Required


interface IOpt{
    { url?: string } 
}

function CustomUrl(opt:Required<IOpt>){
}

对于这个简单的例子,好的,但是如果在我的例子中,类型非常大,我必须用一个接口创建两个接口吗?还有一个没有?这是唯一的方法吗?您也可以使用&与所需的属性组合。对于这个简单的示例,好的,但是如果在我的示例中类型非常大,我是否必须使用两个接口?还有一个没有?是唯一的方法吗?您还可以使用&与所需的属性组合。如果您可以更改其检查部分,请在TS文档中查找自定义/用户定义的类型保护。如果您可以更改其检查部分,请在TS文档中查找自定义/用户定义的类型保护。