是否可以创建一个typeguard或其他完成相同目的的东西来检查变量是否是打字稿联合中的特定接口类型?
interface Foo { a:string }
interface Bar { b:string }
(function() {
function doStuff(thing: Foo | Bar) {
if(typeof thing === 'Foo') {
console.log('Foo');
}
else if (typeof thing === 'Bar') {
console.log('Bar');
}
else {
console.log('unknown');
}
}
var thing: Foo = {a:'a'};
doStuff(thing);
})();
Run Code Online (Sandbox Code Playgroud) 为什么TypeScript强制Get/Set访问器具有相同的类型?假设我想拥有一个返回承诺的属性.
module App {
export interface MyInterface {
foo: ng.IPromise<IStuff>;
}
export interface IStuff {
bar: string;
baz: number;
}
class MyClass implements MyInterface {
private _fooDeferred: ng.IDeferred<IStuff>;
constructor(private $q: ng.IQService) {
this._fooDeferred = this.$q.defer();
}
get foo(): ng.IPromise<IStuff> {
return this._fooDeferred.promise;
}
set foo(value: IStuff) {
this._fooDeferred.resolve(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
"获取"和"设置"访问器必须具有相同的类型才会是来自TypeScript的错误消息.
修复方法是键入任何访问器,但是我们正在失去静态类型的优点,并且可能只是编写JS.
get foo(): any {
return this._fooDeferred.promise;
}
set foo(value: any) {
this._fooDeferred.resolve(value);
}
Run Code Online (Sandbox Code Playgroud) 使用Bootstrap,是否可以为某些断点保持网格列固定?并且为同一列堆叠并与其他断点的页面一起流动?
在下面的示例中,对于大屏幕,我希望右列中的内容在左列保持固定时滚动.对于小屏幕,左列应叠加在右侧,页面应正常滚动.
<div class="container-fluid">
<div class="row">
<div class="col-lg-2">
I want this to always be visible as the right side scrolls.
</div>
<div class="col">
...
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
为什么都insort_left和insort_right存在; 由于元素相等,结果不总是相同的吗?
>>> import bisect
>>> foo = [1,2,3]
>>>
>>> bisect.insort_left(foo, 1)
>>> foo
[1, 1, 2, 3]
>>>
>>> bisect.insort_right(foo, 1)
>>> foo
[1, 1, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud) Mockito不允许嘲笑最终方法.在代码中使用最终方法被认为是不好的做法吗?为什么?
我不想仅仅为了使测试代码工作而改变实现细节,但是,测试框架通常会有这些规则来鼓励更好的编码实践.
使用带整数数组的简单PostreSQL数据库:
CREATE TABLE foo (
id serial PRIMARY KEY,
bar integer[]
);
INSERT INTO foo VALUES(DEFAULT, '{1234567, 20, 30, 40}');
Run Code Online (Sandbox Code Playgroud)
使用pq,这些值由于某种原因被检索为[] uint8的数组.
该文件说,整数类型为Int64的返回.这不适用于数组吗?
db, err := sql.Open("postgres", "user=a_user password=your_pwd dbname=blah")
if err != nil {
fmt.Println(err)
}
var ret []int
err = db.QueryRow("SELECT bar FROM foo WHERE id=$1", 1).Scan(&ret)
if err != nil {
fmt.Println(err)
}
fmt.Println(ret)
Run Code Online (Sandbox Code Playgroud)
输出:
sql: Scan error on column index 0: unsupported Scan, storing driver.Value type []uint8 into type *[]int64
[]
Run Code Online (Sandbox Code Playgroud) 以下代码将产生错误:无法调用其类型缺少调用签名的表达式.
如果接口相同(例如都包含'a'),一切正常.为什么?
interface Foo { a:string }
interface Bar { b:string }
var stuff: Foo[] | Bar[];
function doStuff(thing: Foo | Bar) {
var index = stuff.indexOf(thing);
}
Run Code Online (Sandbox Code Playgroud) typescript ×3
angularjs ×1
bootstrap-4 ×1
css ×1
go ×1
html ×1
java ×1
mockito ×1
pq ×1
python ×1
unit-testing ×1