我有一些界面
ITestInterface {
foo: string;
}
Run Code Online (Sandbox Code Playgroud)
我想将此接口的实例作为参数传递给函数。该函数将采用任何对象类型,因此它本身不会进行类型检查。为了确保对象的类型正确,我可以使用存储:
const passMe: ITestInterface = { foo: "bar" };
someFunction(passMe);
Run Code Online (Sandbox Code Playgroud)
但我希望有一种方法可以内联创建参数,同时仍然进行类型检查。
// made up example syntax
someFunction({ foo: "bar" } istype ITestInterface);
Run Code Online (Sandbox Code Playgroud)
有没有像上面的内联示例这样的好方法?
我尝试过使用 as,但它不限制类型。例如,以下内容是有效的。
someFunction({ foo: "bar", hello: true } as ITestInterface);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以做的另一件事是修改someFunction模板,但这不是我认为很好的解决方案。我不会永远拥有这个特权。
someFunction<TYPE>(arg: TYPE) {
// modify function definition
}
someFunction<ITestInterface>({foo: "bar"});
Run Code Online (Sandbox Code Playgroud) 我已经阅读了这些文档:https : //doc.rust-lang.org/rust-by-example/scope/borrow/mut.html
我也读过这个问题:(不能将不可变的借用内容作为可变借用)
这些文档帮助我理解了如何将借用声明为可变的(我认为):
let mut (part1, part2) = someTuple;
Run Code Online (Sandbox Code Playgroud)
但是我一直无法找到关于什么是不可变的借用的明确说明。这是我的猜测:
let (part1, part2) = someTuple;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个非常基本的问题,但谷歌搜索让我深入到解释的深处,我仍然试图在最简单的上下文中找到我的方向。
我如何在 Rust 中借用可变和不可变?
我有一个从外部资源加载的样式元素,我想应用它的样式而不将其内联。
例如,<link rel="stylesheet" type="text/css" href="my.css" />将加载一个 css 文件并应用它的规则,而不将其内联,并且<script src="zepto.js"></script>会对 javascript 执行相同的操作。
如果你加载外部的 js,你可以使用它来评估它,eval()尽管这是不被允许的。
但是,当加载外部样式时,除了将其添加到 dom 之外,我不知道如何评估它。
那么对于样式是否有类似于 eval 对于脚本的功能呢?有谁知道一个好的技巧可以达到相同的效果?
只要样式适用且不会出现在 dom 中,一切都可以。
该DOMNodeInserted事件已被弃用,所有突变事件均已替换为突变观察者。
但是,在突变观察者中,只有用于观察节点属性、内容和子节点突变的配置选项。没有关于它在 DOM 树中的位置的变化。
我能想到的一个“解决方案”是观察从 document.body 开始的所有内容,搜索正在添加的目标节点的一个突变,但这是一种非常糟糕的做任何事情的方式。
那么用 Mutation Observers 替换已弃用的 DOMNodeInserted 的预期方法是什么?
编辑:发现可能的重复 检测具有特定 ID 的元素何时插入 DOM 中的最有效方法是什么
再说一遍:搜索栏与标签一起使用比与问题一起使用效果更好。解释这一点可以减少重复并节省用户时间
下面是一些代码,您可以在其中看到所有可用的突变观察者配置选项都不会响应添加到页面的元素:
var addMe = document.createElement("div");
var config = {
attributes: true,
childList: true,
characterData: true
}
var observer = new MutationObserver(function(mutations) {
console.log(mutations);
});
observer.observe(addMe, config);
function appendAddMe() {
document.body.appendChild(addMe);
}Run Code Online (Sandbox Code Playgroud)
div {
height: 50px;
width: 50px;
background: #969;
}Run Code Online (Sandbox Code Playgroud)
<button onclick="appendAddMe()">Append addMe</button>Run Code Online (Sandbox Code Playgroud)
Android 和 iOS 的不同版本的操作系统有不同大小的状态栏。使用本机脚本,我怎样才能算出这个高度是多少?
我需要它,这样我就可以在应用程序的顶部添加一个与状态栏大小相同的填充,否则它会与我的应用程序内容的不同数量重叠。
我正在尝试创建一个私有的 mono-repo,其中包含具有公共 git 的子包。我绝不打算修改 mono-repo 之外的代码,因此我不需要子模块。事实上,它们正是我不惜一切代价试图避免的事情。
我不想删除我的 mono-repo 中任何包的 .gits,也不想做任何花哨的事情。
如何简单地禁用 git 中的子模块功能?
我不希望任何东西被视为子模块。从来没有,也可能永远不会。
我尝试在 git 中搜索一些 .submodule 文件夹或其他内容。我没有找到。似乎没有设置可以摆脱这些东西。
我找到了这个链接:un-submodule a git submodule
不幸的是,这些解决方案都与展平子模块有关,并且它们都没有涵盖完全禁用该功能的方法。
我有一个从数组中返回一项的函数:
function oneItem(arr: any[]) {
return arr[~~(Math.random() * arr.length)];
}
Run Code Online (Sandbox Code Playgroud)
我希望有合适的类型。
我尝试过的:
type ValuesOf<T extends any[]>= T[number];
function oneItem<ARRAY extends any[]>(arr: ARRAY): ValuesOf<ARRAY> { ... }
const a = oneItem(["foo", "bar"]);
// typeof a is (string) instead of ("foo" | "bar")
Run Code Online (Sandbox Code Playgroud)
在这里找到(https://github.com/Microsoft/TypeScript/issues/20965)
如何从具有正确类型的数组中返回单个项目?
编辑:我想出了只读数组的方法:
type ValuesOf<T extends readonly any[]>= T[number];
function oneItem<ARRAY extends readonly any[]>(arr: ARRAY): ValuesOf<ARRAY> { ... }
const a = oneItem(["foo", "bar"] as const);
Run Code Online (Sandbox Code Playgroud) 我试图Arc更像其基础数据一样对待,特别是我试图使用重载运算符。以下代码给出了错误,但这是我的尝试。
use std::cmp::Ordering;
use std::option::Option;
use std::sync::Arc;
pub struct SomeNum {
num: u32,
}
impl std::cmp::PartialEq<u32> for SomeNum {
fn eq(&self, other: &u32) -> bool {
return *other == self.num;
}
}
impl std::cmp::PartialOrd<u32> for SomeNum {
fn partial_cmp(&self, other: &u32) -> Option<Ordering> {
if (self.num < *other) {
return Option::Some(Ordering::Less);
}
if (self.num > *other) {
return Option::Some(Ordering::Greater);
}
return Option::Some(Ordering::Equal);
}
}
fn main() {
let test_num = SomeNum { num: 16 };
let …Run Code Online (Sandbox Code Playgroud) 我想从模块中导出所有内容,除了一些我想覆盖的函数之外。像这样的东西:
import * as Base from "base-module";
const extendMeOld = Base.extendMe;
delete Base.extendMe;
export * from Base;
export function extendMe() {
extendMeOld();
someOtherCode();
}
Run Code Online (Sandbox Code Playgroud)
如何使用 Typescript 来实现这一点?
我是这个主题的新手,所以很有可能我弄错了一些关键术语。我想将打字稿文件解析为其组件符号。举一个我想象出来的非常粗略的例子,见下文:
// some ts file
export function yell(output: string) {
alert(output + "!!");
}
Run Code Online (Sandbox Code Playgroud)
会创建这样的东西:
{
symbols: [
{ type: "comment", text: "// some ts file" },
"\n",
{ type: "module", text: "export" },
" ",
{ type: "function", symbols: [
{ type: "name", text: "yell" },
... it goes on
]}
]
}
Run Code Online (Sandbox Code Playgroud)
我很确定这个符号化/标记化是语言服务器初始化阶段的一部分,试图从这个问题中收集信息(https://github.com/Microsoft/language-server-protocol/issues/33)。
但是我通读了有关 initialize ( https://microsoft.github.io/language-server-protocol/specification#initialize )的文档,但找不到 (ctrl-f) 任何有关返回的符号或令牌的信息。
不久前,我在摩纳哥工作,我知道语言服务器的重点主要是标准化代码的标记化和链接/导航,所以我很确定这是适合它的工具。但是文档非常密集,似乎更侧重于代码交互而不是代码解析。
如何使用语言服务器协议将 TS 解析为符号?
编辑:值得一提的是,如果这本身就是一个项目:我不是在寻找这个或任何东西的完整代码。只是对发生的事情的某种粗略概述,也许还有一些相关文档的链接/摘录。
编辑 2:我在这里发现了一个非常相似的问题(TypeScript: get syntax tree),但它没有提到语言服务器,而且似乎是在它们之前的时间出现的。
编辑 3:看来我正在寻找的正确术语是 AST。在网上找到了一个非常酷的 TypeScript …
typescript ×4
javascript ×2
rust ×2
android ×1
arrays ×1
borrowing ×1
css ×1
eval ×1
export ×1
git ×1
ios ×1
mutable ×1
nativescript ×1
styling ×1
typechecking ×1
types ×1