gpt4 book ai didi

typescript :number[] 和 [number,number] 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 21:16:00 38 4
gpt4 key购买 nike

我正在学习 Typescript 并尝试了解类型和接口(interface)的最佳实践。我正在玩一个使用 GPS 坐标的示例,想知道一种方法是否比另一种更好。

let gps1 : number[];
let gps2 : [number, number]
interface Coordinate {
0: number,
1: number
}
let gps3 : Coordinate;

我想更大的问题是输入固定大小和类型的数组是否有值(value)。因为 Typescript 不允许我在运行时轻松测试某个值是否属于某种类型,对吗? (即从 JSON 字符串反序列化)

gps3 = [1,3]
let check = gps3 instanceof Coordinate; // doesn't work

最佳答案

在您的示例中,gps1 是一个数字数组,gps2a tuple两个数字:

Tuple types allow you to express an array where the type of a fixed number of elements is known, but need not be the same.

gps3 instanceof Coordinate 不起作用的原因是 Coordinate 是一个接口(interface),而不是实际的运行时类型。
接口(interface)类型的编译器用户检查您的代码,但它不会被翻译成 javascript。

您可以创建一个 type guard为此:

interface Coordinate {
0: number,
1: number
}

function isCoordinate(obj: any): obj is Coordinate {
return obj instanceof Array && obj.length === 2 && typeof obj[0] === "number" && typeof obj[1] === "number";
}

let a;

if (isCoordinate(a)) {
console.log(a[0]);
}

关于 typescript :number[] 和 [number,number] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274045/

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