gpt4 book ai didi

typescript - 类型对象包括字符串?

转载 作者:行者123 更新时间:2023-12-04 02:26:47 24 4
gpt4 key购买 nike

function isObject(v: any): v is Object{ 
return v instanceof Object && !Array.isArray(v);
}


let v: string | Object;
if (isObject(v))
v.hasOwnProperty("x");
else
if (typeof v === 'string')
v.trim(); //Error: Property 'trim' does not exist on type 'never'

我对最后一行中的错误感到困惑,显然,v 被缩小为键入“never”,但我看不到它的逻辑。( typescript 版本 4.2.3)

最佳答案

这是在 typescript 中定义的 Object 接口(interface)的方式:

interface Object {
constructor: Function;
toString(): string;
toLocaleString(): string;
valueOf(): Object;
hasOwnProperty(v: PropertyKey): boolean;
isPrototypeOf(v: Object): boolean;
propertyIsEnumerable(v: PropertyKey): boolean;
}

几乎任何类型,包括像 string 这样的基元,都可以分配给 Object(是的,string 具有上述所有属性)。

object (小写)是一种表示非原始类型的类型,即任何不是 numberstringbooleansymbol 的类型nullundefined

function isObject(v: any): v is object {
return v instanceof Object && !Array.isArray(v);
}

declare let v: string | object;
if (isObject(v))
v.hasOwnProperty("x");
else
v.trim(); // v narrowed to string

Playground

Do's and Don'ts

关于typescript - 类型对象包括字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66986475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com