tur*_*tle 1 typescript topojson
请原谅这个幼稚的问题;我是打字稿的新手。在 javascript 中,我可以使用topojson.mesh创建一个像这样的网格对象:
import us from "./counties-albers-10m.json"
topojson.mesh(us, us.objects.states, (a, b) => a !== b))
Run Code Online (Sandbox Code Playgroud)
当我尝试在 Typescript 中执行此操作时,我收到此警告:
Types of property 'type' are incompatible. Type 'string' is not assignable to type "Topology" TS2345
Run Code Online (Sandbox Code Playgroud)
我也@types/topojson安装了。谁能帮我调试一下?我对打字稿的了解不够,无法理解问题所在。
更广泛地说,如何调试这样的错误?我发现 3rd 方包存在各种类型问题,并且在许多情况下不知道如何为我的 javascript 对象分配正确的类型。谢谢您的帮助。
安装后,@types/topojson我可以topojson-specification像这样导入所需的类型:
import * as topojson from 'topojson-client';
import { GeometryObject, Topology } from 'topojson-specification';
import us from '../counties-albers-10m.json';
topojson.mesh(
(us as unknown) as Topology,
us.objects.states as GeometryObject,
(a: GeometryObject, b: GeometryObject) => a !== b
);
Run Code Online (Sandbox Code Playgroud)
更广泛地说,如何调试这样的错误?
为了调试这种事情,我使用我的 IDE(VS Code)来检查方法,比如.mesh方法并查看它期望的类型。我还使用Go To Definition功能(?+ 在 Mac 上单击)来查看类型定义:

转到类型定义文件还向我展示了他们从何处导入类型。
有一部分我想不通。当您在 TypeScript 中导入 JSON 时,它会自动推断类型,但由于多种@types/topojson原因(例如number[] !== [number, number]),这些自动类型似乎与那些冲突。这就是为什么我需要unknown在转换为正确类型之前先转换为。这可能不是最佳解决方案,但我不知道描述 JSON 文件类型的方法。
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |